Nextjs'de proxy geçişi çok parçalı (ayrıca NodeJS)

0

Soru

Benim görevim vekaleten geçmekti. multipart/form-data arasında NextJS apı yolları, ancak yerleşik bodyParser gelen muptipart verilerini kırıyordu. NodeJS için diğer eklentiler, çok parçalı verilerin net baytlarını proxy'ye geçirmeme ve form verisi olmayan diğer nesneleri yapmama izin vermiyor.

Peki, eklentiler olmadan NextJS API rotalarında çok parçalı/form verilerini proxy olarak nasıl geçirebilirim?

multipartform-data next.js node.js proxy
2021-11-23 17:03:25
1

En iyi cevabı

0

Bir sonraki kod, proxy pass başarısının çözümüdür multipart/form-data NextJS için eklentiler olmadan:

// /pages/api/miltipart.ts

// helpers to generate cookies
import { setCookies } from '@utils/api';
import type { NextApiRequest, NextApiResponse } from 'next';

// turn off default parser for current route
export const config = {
  api: {
    bodyParser: false,
  },
};

const handler = async (req: NextApiRequest, res: NextApiResponse): Promise<void> => {
  // create container for all buffers of multipart/form-data
  const buffers: any[] = [];
  // first of all listen 'readable' event to catch all incoming request data
  req
    .on('readable', () => {
      // read every incoming chunk. Every chunk is 64Kb data of Buffer
      const chunk = req.read();
      if (chunk !== null) {
        buffers.push(chunk);
      }
    })
    // listen on end event of request to send our data
    .on('end', async () => {
        try {
          const result = await fetch('https://google.com/api/upload', {
            method: 'POST',
            credentials: 'include',
            mode: 'cors',
            headers: {
              'Content-Type': req.headers['content-type'] ?? 'multipart/form-data',
              'User-Agent': req.headers['user-agent'] ?? '',
              Authorization: 'Bearer Token',
            },
            // concatination of array of Buffers and store it to body
            body: Buffer.concat(buffers),
          });
          const body = await result.json();
          setCookies(res, result.headers);
          res.status(result.status).json(body);
          return;
        } catch (error) {
          res.status(500).json(error);
        }

      res.status(405);
      res.send('Method Not Allowed');
    });
};
export default handler;
2021-11-23 17:03:25

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................