节点 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);
};
方法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);
};