How do I consume the JSON POST data in an Express application
我将以下JSON字符串发送到我的服务器。
1 2 3 4 5 6 7 8 9 10 | ( { id = 1; name = foo; }, { id = 2; name = bar; } ) |
在服务器上我有这个。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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响应,但其他两种方法从未运行。 这是为什么?
我认为你将
如果您使用的是有效的JSON并使用
1 2 3 4 5 6 7 8 9 10 11 | 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); |
按照以下方式进行测试:
1 2 | $ curl -d '{"MyKey":"My Value"}' -H"Content-Type: application/json" http://127.0.0.1:3000/ {"MyKey":"My Value"} |
针对Express 4+进行了更新
在v4之后,正文解析器被拆分为它自己的npm包,需要单独安装
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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版开始,可以使用新的
1 2 3 4 5 6 7 8 9 10 11 12 | 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); |
对于Express v4 +
从npm安装body-parser。
1 | $ npm install body-parser |
https://www.npmjs.org/package/body-parser#installation
1 2 3 4 5 6 7 8 9 10 11 12 | 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() }) |
有时您不需要第三方库来解析文本中的JSON。
有时您只需要以下JS命令,首先尝试:
1 | const res_data = JSON.parse(body); |
1 2 3 | const express = require('express'); let app = express(); app.use(express.json()); |
这个app.use(express.json)现在可以让你读取传入的帖子JSON对象
对于那些在
我忘记了设置
在请求中。改变它解决了这个问题。
@Daniel Thompson提到他忘记在请求中添加{"Content-Type":"application / json"}。他能够更改请求,但是,并不总是可以更改请求(我们正在这里处理服务器)。
在我的情况下,我需要强制内容类型:text / plain被解析为json。
如果您无法更改请求的内容类型,请尝试使用以下代码:
1 | app.use(express.json({type: '*/*'})); |
而不是全局使用express.json(),我更喜欢只在需要的地方应用它,例如在POST请求中:
1 2 3 4 | app.post('/mypost', express.json({type: '*/*'}), (req, res) => { // echo json res.json(req.body); }); |