Данные 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"]

Другие вопросы по тегам