Данные JSON в теле запроса не анализируются с использованием body-parser
Когда я отправляю запрос POST, используя почтальон, на localhost:8080/api/newUser с телом запроса:
{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);
Что я делаю неправильно?
3 ответа
В 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);
Изменить заголовок запроса
'Content-Type':'application/json'
Так что bodyParser может анализировать тело.
* Это то, что работает для меня. я использую угловой 2+ с экспресс (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"]