Обновился до Express 4 и теперь парсер тела не работает. Кто-нибудь знает, как решить эту проблему? - PullRequest
0 голосов
/ 20 июня 2020

Я только что обновил express 3 до 4, и теперь мой парсер тела не работает. Мой код выглядит следующим образом.

const express = require('express');
const bodyParser = require('body-parser');
const winston = require('winston');
const UserModel = require('../models').User;

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: false
}));

app.post('/login', (req, res) => {
    console.log(req.body); // prints { username: 'admin', password: 'admin' }
    winston.debug(req.body); // prints nothing

      const username = req.body.username;
      const password = req.body.password;

      var user = await UserModel.findOne({
        where: {
            user_name: req.body.username
        }
    })
});

Также UserModel.findOne не работает, потому что req.body.username не работает. Это использование отлично работает в express 4.

"express ":" ~ 4.17.1 "" body-parser ":" ^ 1.19.0 ",

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Для express v4.16.0 они возвращают express.json(), поэтому вы можете удалить bodyParser и попробовать следующее:

app.use(express.json());
app.use(express.urlencoded({
  extended: false
}));
0 голосов
/ 20 июня 2020

Посмотрите в Documentation пример Express route-specifici c. Попробуйте так:

const express = require('express');
const bodyParser = require('body-parser');
const winston = require('winston');
const UserModel = require('../models').User;

const jsonParser = bodyParser.json();
const urlencodedParser = bodyParser.urlencoded({
    extended: false
});

app.post('/login', jsonParser, (req, res) => {
    console.log(req.body); // prints { username: 'admin', password: 'admin' }
    winston.debug(req.body); // prints nothing

      const username = req.body.username;
      const password = req.body.password;

      var user = await UserModel.findOne({
        where: {
            user_name: req.body.username
        }
    })
});
...