【问题标题】:Node api request with multipart/form-data带有 multipart/form-data 的节点 api 请求
【发布时间】:2021-08-30 16:44:35
【问题描述】:

方法 POST

如何在 node.js 没有 express 和 body 解析器的情况下捕获这些数据

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: 

【问题讨论】:

    标签: javascript node.js api request next.js


    【解决方案1】:

    也许你可以使用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,
      },
    }
    

    【讨论】:

      【解决方案2】:

      是的……!我得到了解决方案“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);
      };
      
      
      

      【讨论】:

        猜你喜欢
        • 2019-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多