节点 api 请求 multipart/form-data

Node api request with multipart/form-data

方法POST

如何在 node.js 没有 express 和正文解析器的情况下捕获此数据

FORM DATA: 
ORDERID: 
MID: 
TXNID: 
TXNAMOUNT: 5.00
PAYMENTMODE: NB
CURRENCY: INR
TXNDATE: 2021-06-14+23%3A02%3A30.0
STATUS: TXN_SUCCESS
RESPCODE: 01
RESPMSG: Txn+Success
GATEWAYNAME: BHARAT
BANKTXNID: 19854393260
BANKNAME: Bharat+Bank
CHECKSUMHASH: 

也许你可以使用 formidable

import  formidable  from  'formidable';

const  form = formidable({ multiples:  true });

export  default  async  function  parseMultipartForm(req, res ) {
    const  contentType = req.headers['content-type']
    if (contentType && contentType.indexOf('multipart/form-data') !== -1) {
        form.parse(req, (err, fields, files) => {
          // your code here
        })
    } 
}

一个缺点是我相信您将不得不禁用 内置 正文解析器

//next.config.js
export const config = {
  api: {
    bodyParser: false,
  },
}

是的...!我得到了解决方案 "busboy"

"use strict";

const busboy = require("busboy");

const headers = {
  "Content-Type": "application/json",
  "Access-Control-Allow-Origin": "*",
  "Access-Control-Allow-Methods": "OPTIONS, POST",
  "Access-Control-Allow-Headers": "Content-Type",
};

module.exports.handler= async (event, context, callback) => {
  var contentType =
    event.headers["Content-Type"] || event.headers["content-type"];

  var bb = new busboy({ headers: { "content-type": contentType } });

  bb.on("file", function (fieldname, file, filename, encoding, mimetype) {
    console.log(
      "File [%s]: filename=%j; encoding=%j; mimetype=%j",
      fieldname,
      filename,
      encoding,
      mimetype
    );

    file

      .on("data", (data) =>
        console.log("File [%s] got %d bytes", fieldname, data.length)
      )

      .on("end", () => console.log("File [%s] Finished", fieldname));
  })

    .on("field", (fieldname, val) =>
      console.log("Field [%s]: value: %j", fieldname, val)
    )

    .on("finish", () => {
      console.log("Done parsing form!");

      context.succeed({
        statusCode: 200,
        body: "all done",
        headers,
        message: "null",
      });
    })

    .on("error", (err) => {
      console.log("failed", err);

      context.fail({ statusCode: 500, body: err, headers, message: "null" });
    });

  bb.end(event.body);
};