NodeJs 如何解析从 Postman 发送的 post 正文
NodeJs how to parse post body sent from Postman
我有这个简单的 NodeJs 代码来处理 post 从任何其他来源(如 Postman)发送的请求
const http = require("http");
const { parse } = require("querystring");
const server = http.createServer(function (request, response) {
console.dir(request.param);
if (request.method === "POST") {
let body = "";
request.on("data", (chunk) => {
body += chunk.toString(); // convert Buffer to string
});
request.on("end", () => {
const result = parse(body);
console.log(result);
response.end("ok");
});
}
});
const port = 8080;
const host = "127.0.0.1";
server.listen(port, host);
当我从 Postman 发送 post 请求时使用 user:foo
之类的表单数据,我在终端中得到了这样的数据
[Object: null prototype] {
'----------------------------908153651530187984286555\r\nContent-Disposition: form-data; name': '"user"\r\n\r\nfoo\r\n----------------------------908153651530187984286555--\r\n'
当我运行
console.log(result.user)
我得到undefined
我把解析体const result = parse(body);
改成了这个
const result = JSON.parse(JSON.stringify(body))
我得到了
----------------------------939697314758807513697606
Content-Disposition: form-data; name="user"
foo
----------------------------939697314758807513697606--
但还是得不到result.user
如何通过将此类数据转换为对象来处理此类数据并让用户像这样result.user
如果您的 body 中的数据是 JSON object,您可以删除块中的 toString 并将解析替换为 JSON.parse,如下所示:
let body = "";
request.on("data", (chunk) => {
body += chunk; // convert Buffer to string
});
request.on("end", () => {
const result = JSON.parse(body);
console.log(result);
response.end("ok");
});
如果您从邮递员发送数据时选择“原始”和“JSON”,这将正常工作,在 body 中发送如下 object:
{
"user": "john"
}
如果数据作为“x-www-form-urlencoded”发送,您当前的方法(使用查询字符串的解析方法)应该可以正常工作。
简而言之,解决方案是修改您发送到服务器的请求的 Content-Type header。
我有这个简单的 NodeJs 代码来处理 post 从任何其他来源(如 Postman)发送的请求
const http = require("http");
const { parse } = require("querystring");
const server = http.createServer(function (request, response) {
console.dir(request.param);
if (request.method === "POST") {
let body = "";
request.on("data", (chunk) => {
body += chunk.toString(); // convert Buffer to string
});
request.on("end", () => {
const result = parse(body);
console.log(result);
response.end("ok");
});
}
});
const port = 8080;
const host = "127.0.0.1";
server.listen(port, host);
当我从 Postman 发送 post 请求时使用 user:foo
之类的表单数据,我在终端中得到了这样的数据
[Object: null prototype] {
'----------------------------908153651530187984286555\r\nContent-Disposition: form-data; name': '"user"\r\n\r\nfoo\r\n----------------------------908153651530187984286555--\r\n'
当我运行
console.log(result.user)
我得到undefined
我把解析体const result = parse(body);
改成了这个
const result = JSON.parse(JSON.stringify(body))
我得到了
----------------------------939697314758807513697606
Content-Disposition: form-data; name="user"
foo
----------------------------939697314758807513697606--
但还是得不到result.user
如何通过将此类数据转换为对象来处理此类数据并让用户像这样result.user
如果您的 body 中的数据是 JSON object,您可以删除块中的 toString 并将解析替换为 JSON.parse,如下所示:
let body = "";
request.on("data", (chunk) => {
body += chunk; // convert Buffer to string
});
request.on("end", () => {
const result = JSON.parse(body);
console.log(result);
response.end("ok");
});
如果您从邮递员发送数据时选择“原始”和“JSON”,这将正常工作,在 body 中发送如下 object:
{
"user": "john"
}
如果数据作为“x-www-form-urlencoded”发送,您当前的方法(使用查询字符串的解析方法)应该可以正常工作。
简而言之,解决方案是修改您发送到服务器的请求的 Content-Type header。