如何在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.body
path的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);