Не удается заставить парсер тела что-либо вернуть

Я прочитал dussins сообщений stackoverflow, но не могу заставить работать мой бодипарсер. Чтобы не усложнять ситуацию, я выбрал самое простое, что я мог себе представить, а именно приведенный ниже код, и включил в себя просто синтаксический анализ одного единственного маршрута. Может кто видит проблему?

маршруты / login.js

var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');

router.get('/', (req, res) => {
        res.send('<form method="POST" action="'+ req.originalUrl +'"><input type="text" id="personalNumber" autocomplete="off"><input type="submit" value="Log in"></form>');
        res.end();
});

router.post('/', bodyParser.urlencoded({ extended: false }), (req, res) => {
        console.log('personal', req.body, req.personalNumber, res.body, req.headers);
        res.send('personal', req.body, req.personalNumber, res.body, JSON.stringify(req.headers));
        res.end();
});

module.exports = router;

server.js упрощен

var express = require('express');
var app = express();

var login = require(__dirname + '/routes/login');
app.use('/login', login);

app.listen(80, () => {
        console.log('Listening on port 80');
});

При переходе в / login, вводе чего-либо во входных данных и отправке (запуск публикации в / login) будет использоваться следующий вывод консоли:

Listening on port 80
personal {} undefined undefined { host: 'localhost',
  connection: 'keep-alive',
  'content-length': '0',
  pragma: 'no-cache',
  'cache-control': 'no-cache',
  origin: 'http://localhost',
  'upgrade-insecure-requests': '1',
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36',
  'content-type': 'application/x-www-form-urlencoded',
  accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  referer: 'http://localhost/login',
  'accept-encoding': 'gzip, deflate',
  'accept-language': 'en-US,en;q=0.8,sv;q=0.6' }

Ожидаемый результат будет заключаться в том, что req.body будет содержать некоторую информацию о данных из формы.

req.body = {
    personalNumber: 'inputData'
};

person user5018460    schedule 21.09.2016    source источник
comment
Вы должны быть более конкретными в том, что происходит. Продемонстрируйте, что делает код иначе, чем вы ожидаете.   -  person nem035    schedule 21.09.2016
comment
ваша консоль отображает ожидаемый результат в командной строке?   -  person Beginner    schedule 21.09.2016
comment
... или является работает на 80-м порту проблема?   -  person nem035    schedule 21.09.2016
comment
Обновил вопрос. Надеюсь, это поможет разгадать загадку.   -  person user5018460    schedule 21.09.2016


Ответы (2)


body-parser работает правильно, если он добавлен в ваш основной файл перед всеми routes

Поэтому поместите следующий код после создания объекта express в server.js файле

var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: false
}));
person abdulbarik    schedule 21.09.2016

    var express = require('express');
    var router = express.Router();
    var bodyParser = require('body-parser');
    router.urlencoded({ extended: false });
    router.use(bodyParser.json());
    router.get('/', (req, res) => {
            res.send('<form method="POST" action="'+ req.originalUrl +'"><input type="text" id="username" autocomplete="off"><input type="submit" value="Log in"></form>');
            res.end();
    });

    router.post('/', (req, res) => {
            console.log('personal', req.body, req.personalNumber, res.body, req.headers);
            res.send('personal', req.body, req.personalNumber, res.body, JSON.stringify(req.headers));
            res.end();
    });

    module.exports = router;

Попробуйте это, это может сработать.

person suyesh    schedule 21.09.2016