|
- import { IncomingMessage } from 'http';
- import busboy from 'busboy';
-
- export const getBody = (req: IncomingMessage) => new Promise<Buffer>((resolve, reject) => {
- let body = Buffer.from('');
-
- req.on('data', (chunk) => {
- body = Buffer.concat([body, chunk]);
- });
-
- req.on('error', (err) => {
- reject(err);
- });
-
- req.on('end', () => {
- resolve(body);
- });
- });
-
- export const parseMultipartFormData = async (
- req: IncomingMessage,
- ) => new Promise<Record<string, unknown>>((resolve, reject) => {
- const body: Record<string, unknown> = {};
- const bb = busboy({
- headers: req.headers,
- });
-
- bb.on('file', (name, file, info) => {
- const {
- filename,
- mimeType: mimetype,
- } = info;
-
- let fileData = Buffer.from('');
-
- file.on('data', (data) => {
- fileData = Buffer.concat([fileData, data]);
- });
-
- file.on('close', () => {
- body[name] = new File([fileData.buffer], filename, {
- type: mimetype,
- });
- });
- });
-
- bb.on('field', (name, value) => {
- body[name] = value;
- });
-
- bb.on('close', () => {
- resolve(body);
- });
-
- bb.on('error', (error) => {
- reject(error);
- });
-
- req.pipe(bb);
- });
|