我有以下Node.js代码:
var express = require('express');
var app = express.createServer(express.logger());
app.use(express.bodyParser());
app.post('/', function(request, response) {
response.write(request.body.user);
response.end();
});
现在如果我POST一些东西:
curl -d user=Someone -H Accept:application/json --url http://localhost:5000
我得到了某人。现在,如果我想要得到完整的请求体呢?我试着做response.write(request.body),但Node.js抛出一个异常,说“第一个参数必须是一个字符串或Buffer”,然后进入一个“无限循环”,异常说“发送后不能设置标头”;这也是真的,即使我做var reqBody = request.body;然后写入response.write(reqBody)。
这里的问题是什么?
另外,我可以只得到原始请求而不使用express.bodyParser()吗?
Express 4.0及以上:
$ NPM install——保存body-parser
然后在你的节点应用中
const bodyParser = require('body-parser');
app.use(bodyParser);
Express 3.0及以下:
尝试在cURL调用中传递这个:
——header "Content-Type: application/json"
确保你的数据是JSON格式:
{“用户”:“有人”}
另外,你也可以使用控制台。在node.js代码中使用Dir查看对象内部的数据,如下例所示:
var express = require('express');
var app = express.createServer();
app.use(express.bodyParser());
app.post('/', function(req, res){
console.dir(req.body);
res.send("test");
});
app.listen(3000);
另一个问题可能也有帮助:如何在express node.js POST请求中接收JSON ?
如果您不想使用bodyParser,请查看另一个问题:https://stackoverflow.com/a/9920700/446681
从express v4.16开始,不需要任何额外的模块,只需使用内置的JSON中间件:
app.use(express.json())
是这样的:
const express = require('express')
app.use(express.json()) // <==== parse request body as JSON
app.listen(8080)
app.post('/test', (req, res) => {
res.json({requestBody: req.body}) // <==== req.body will be a parsed JSON object
})
注意- body-parser(这依赖于它)已经包含在express中。
另外,不要忘记发送头部内容类型:application/json
这也可以在没有体解析器依赖的情况下实现,侦听request:data和request:end并在请求结束时返回响应,请参阅下面的代码示例。裁判:https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/请求主体
var express = require('express');
var app = express.createServer(express.logger());
app.post('/', function(request, response) {
// push the data to body
var body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
// on end of data, perform necessary action
body = Buffer.concat(body).toString();
response.write(request.body.user);
response.end();
});
});
如果你懒得阅读大量的帖子数据。
您可以简单地粘贴下面的行
读取json。
下面是对于TypeScript,类似的操作也可以用于JS。
app.ts
import bodyParser from "body-parser";
// support application/json type post data
this.app.use(bodyParser.json());
// support application/x-www-form-urlencoded post data
this.app.use(bodyParser.urlencoded({ extended: false }));
在接收POST调用的任意控制器中使用如下所示
userController.ts
public async POSTUser(_req: Request, _res: Response) {
try {
const onRecord = <UserModel>_req.body;
/* Your business logic */
_res.status(201).send("User Created");
}
else{
_res.status(500).send("Server error");
}
};
_req。body应该解析你的json数据到你的TS模型。
接受的答案只适用于与JSON格式兼容的主体。一般来说,主体可以使用
app.use(
Express.raw({
inflate: true,
limit: '50mb',
type: () => true, // this matches all content types
})
);
就像贴在这里的。要求的事情。body具有Buffer类型,可以转换为所需的格式。
例如,通过:
let body = req.body.toString()
或通过以下方式转换成JSON:
let body = req.body.toJSON();