如何在Express应用程序中使用JSON POST数据?

我发送以下JSONstring到我的服务器。

( { 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'); }); }); 

当我发送string,它显示我得到了一个200响应,但其他两个方法永远不会运行。 这是为什么?

我认为你正在将response对象的使用与request的使用混为一谈。

response对象用于将HTTP响应发送callback用客户端,而您正在访问request的主体。 看到这个答案提供了一些指导。

如果您使用的是有效的JSON,并使用Content-Type: application/json ,那么您可以使用bodyParser中间件来parsing请求主体,并将结果放在request.bodypath的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); 

testing方法如下:

 $ 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 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() }) 

有时你不需要第三方库来从文本中parsingJSON。 有时候你需要下面的JS命令,先试一下:

  const res_data = JSON.parse(body);