请求正文中的 JSON 数据未使用正文解析器进行解析
The JSON data in request body is not getting parsed using body-parser
当我使用邮递员向 localhost:8080/api/newUser 发送 POST 请求时,请求正文为:
{name: "Harry Potter"}
在服务器端 console.log(req.body) 打印:
{ '{name: "Harry Potter"}': '' }
server.js
var express = require('express');
var app = express();
var router = express.Router();
var bodyParser = require('body-parser');
app.use('/', express.static(__dirname));
router.use(function(req, res, next) {
next();
});
router
.route('/newUser')
.post(function(req, res) {
console.log(req.body);
});
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); // support json encoded bodies
app.use('/api', router);
app.listen(8080);
我做错了什么?
在express.js中,声明中间件的顺序非常重要。 bodyParser
中间件的定义必须早于您自己的中间件(api 个端点)。
var express = require('express');
var app = express();
var router = express.Router();
var bodyParser = require('body-parser');
app.use('/', express.static(__dirname));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); // support json encoded bodies
router
.route('/newUser')
.post(function(req, res) {
console.log(req.body);
});
app.use('/api', router);
app.listen(8080);
更改请求header
'Content-Type':'application/json'
以便body解析器可以解析body。
*这对我有用。我正在使用 angular 2+ 和 express(body-parser)
我花了很多时间试图弄清楚如何将 Axios 中的对象作为键值对传递,并最终决定采用替代方案,因为设置了 Content-Type: "application/json" 重新调整空对象。
如果以上选项都不适合你,我会考虑:
- 正在提取密钥(其中应包含整个
对象)
- 正在解析密钥
- 正在访问新创建对象的值
这对我有用:
var obj = (Object.keys(req.body)[0])
var NewObj = JSON.parse(obj)
var name = apiWords["Key1"]
var image = apiWords["Key2"]
当我使用邮递员向 localhost:8080/api/newUser 发送 POST 请求时,请求正文为:
{name: "Harry Potter"}
在服务器端 console.log(req.body) 打印:
{ '{name: "Harry Potter"}': '' }
server.js
var express = require('express');
var app = express();
var router = express.Router();
var bodyParser = require('body-parser');
app.use('/', express.static(__dirname));
router.use(function(req, res, next) {
next();
});
router
.route('/newUser')
.post(function(req, res) {
console.log(req.body);
});
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); // support json encoded bodies
app.use('/api', router);
app.listen(8080);
我做错了什么?
在express.js中,声明中间件的顺序非常重要。 bodyParser
中间件的定义必须早于您自己的中间件(api 个端点)。
var express = require('express');
var app = express();
var router = express.Router();
var bodyParser = require('body-parser');
app.use('/', express.static(__dirname));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); // support json encoded bodies
router
.route('/newUser')
.post(function(req, res) {
console.log(req.body);
});
app.use('/api', router);
app.listen(8080);
更改请求header
'Content-Type':'application/json'
以便body解析器可以解析body。
*这对我有用。我正在使用 angular 2+ 和 express(body-parser)
我花了很多时间试图弄清楚如何将 Axios 中的对象作为键值对传递,并最终决定采用替代方案,因为设置了 Content-Type: "application/json" 重新调整空对象。
如果以上选项都不适合你,我会考虑:
- 正在提取密钥(其中应包含整个 对象)
- 正在解析密钥
- 正在访问新创建对象的值
这对我有用:
var obj = (Object.keys(req.body)[0])
var NewObj = JSON.parse(obj)
var name = apiWords["Key1"]
var image = apiWords["Key2"]