我将以下JSON字符串发送到我的服务器。
(
{
id = 1;
name = foo;
},
{
id = 2;
name = bar;
}
)
在服务器上我有这个。
app.post('/', function(request, response) {
console.log("Got response: " + response.statusCode);
response.on('data', function(chunk) {
queryResponse+=chunk;
console.log('data');
});
response.on('end', function(){
console.log('end');
});
});
当我发送字符串时,它显示我得到了200响应,但其他两种方法从未运行。那是为什么?
答案 0 :(得分:382)
我认为您将response
对象的使用与request
的使用混为一谈。
response
对象用于将HTTP响应发送回调用客户端,而您希望访问request
的正文。请参阅此answer,其中提供了一些指导。
如果您使用的是有效的JSON并使用Content-Type: application/json
进行POST,那么您可以使用bodyParser
中间件来解析请求正文并将结果放在路由的request.body
中。
var express = require('express')
, app = express.createServer();
app.use(express.bodyParser());
app.post('/', function(request, response){
console.log(request.body); // your JSON
response.send(request.body); // echo the result back
});
app.listen(3000);
按照以下方式进行测试:
$ curl -d '{"MyKey":"My Value"}' -H "Content-Type: application/json" http://127.0.0.1:3000/
{"MyKey":"My Value"}
针对Express 4 +
进行了更新在v4之后,正文解析器被拆分为它自己的npm包,需要单独安装npm install body-parser
var express = require('express')
, bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
app.post('/', function(request, response){
console.log(request.body); // your JSON
response.send(request.body); // echo the result back
});
app.listen(3000);
更新Express 4.16 +
从版本4.16.0开始,可以使用新的express.json()
中间件。
var express = require('express');
var app = express();
app.use(express.json());
app.post('/', function(request, response){
console.log(request.body); // your JSON
response.send(request.body); // echo the result back
});
app.listen(3000);
答案 1 :(得分:194)
对于Express v4 +
从npm安装body-parser。
$ npm install body-parser
https://www.npmjs.org/package/body-parser#installation
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse application/json
app.use(bodyParser.json())
app.use(function (req, res, next) {
console.log(req.body) // populated!
next()
})
答案 2 :(得分:10)
有时您不需要第三方库来解析文本中的JSON。 有时您只需要以下JS命令,首先尝试:
const res_data = JSON.parse(body);
答案 3 :(得分:3)
对于那些在req.body
中获得空对象的人
我忘了设置
headers: {"Content-Type": "application/json"}
在请求中。更改它可以解决问题。
答案 4 :(得分:3)
const express = require('express');
let app = express();
app.use(express.json());
此app.use(express.json)现在将允许您读取传入的JSON对象
答案 5 :(得分:0)
@Daniel Thompson提到他忘记在请求中添加{“ Content-Type”:“ application / json”}。他能够更改请求,但是,更改请求并非总是可行的(我们正在此服务器上工作)。
在我的情况下,我需要强制将content-type:text / plain解析为json。
如果您无法更改请求的内容类型,请尝试使用以下代码:
app.use(express.json({type: '*/*'}));
我宁愿只在需要时(例如在POST请求中)应用它,而不是全局使用express.json():
app.post('/mypost', express.json({type: '*/*'}), (req, res) => {
// echo json
res.json(req.body);
});
答案 6 :(得分:0)
初学者的错误...我在本地模块中使用了app.use(express.json());
而不是主文件(入口点)。