neu*_*cer 287 json node.js express
我将以下JSON字符串发送到我的服务器.
(
{
id = 1;
name = foo;
},
{
id = 2;
name = bar;
}
)
Run Code Online (Sandbox Code Playgroud)
在服务器上我有这个.
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');
});
});
Run Code Online (Sandbox Code Playgroud)
当我发送字符串时,它显示我得到了200响应,但其他两种方法从未运行.这是为什么?
Per*_* P. 436
我认为你把response对象的使用与对象的使用混为一谈request.
该response对象用于将HTTP响应发送回调用客户端,而您希望访问该主体request.请参阅此答案,提供一些指导.
如果您正在使用有效的JSON并使用它进行POST Content-Type: application/json,那么您可以使用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);
Run Code Online (Sandbox Code Playgroud)
按照以下方式进行测试:
$ curl -d '{"MyKey":"My Value"}' -H "Content-Type: application/json" http://127.0.0.1:3000/
{"MyKey":"My Value"}
Run Code Online (Sandbox Code Playgroud)
针对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);
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
chr*_*ton 201
对于Express v4 +
从npm安装body-parser.
$ npm install body-parser
Run Code Online (Sandbox Code Playgroud)
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()
})
Run Code Online (Sandbox Code Playgroud)
ann*_*neb 16
@Daniel汤普森提到,他已经忘记了添加{“内容类型”:“应用/ JSON”}的请求。他能够更改请求,但是,更改请求并不总是可能的(我们正在此处处理服务器)。
就我而言,我需要强制将 content-type: text/plain 解析为 json。
如果您无法更改请求的内容类型,请尝试使用以下代码:
app.use(express.json({type: '*/*'}));
Run Code Online (Sandbox Code Playgroud)
而不是全局使用 express.json() ,我更喜欢仅在需要的地方应用它,例如在 POST 请求中:
app.post('/mypost', express.json({type: '*/*'}), (req, res) => {
// echo json
res.json(req.body);
});
Run Code Online (Sandbox Code Playgroud)
xim*_*ims 15
有时您不需要第三方库来解析文本中的JSON.有时您只需要以下JS命令,首先尝试:
const res_data = JSON.parse(body);
Run Code Online (Sandbox Code Playgroud)
对于那些在里面得到空物体的人 req.body
我忘记
headers: {"Content-Type": "application/json"}
了提出要求。更改它可以解决问题。
小智 5
const express = require('express');
let app = express();
app.use(express.json());Run Code Online (Sandbox Code Playgroud)
这个app.use(express.json)现在可以让您读取传入的JSON对象
| 归档时间: |
|
| 查看次数: |
392160 次 |
| 最近记录: |