Node.js(с express & bodyParser): невозможно получить данные формы из почтового запроса

Я не могу восстановить данные формы почтового запроса, отправленного на мой сервер Node.js. Я поставил ниже код сервера и почтовый запрос (отправленный с использованием почтового менеджера в хроме):

Запрос на отправку

POST /api/login HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache

----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="userName"

jem
----WebKitFormBoundaryE19zNvXGzXaLvS5C

Код сервера NodeJS

var express    = require('express');        // call express
var app        = express();                 // define our app using express
var bodyParser = require('body-parser');

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

app.all('/*', function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Content-Type,accept,access_token,X-Requested-With');
    next();
});

var port = process.env.PORT || 8080;        // set our port

var router = express.Router();              // get an instance of the express Router

router.get('/', function(req, res) {

    res.json({ message: 'I am groot!' });   
});

// Login
router.route('/login')

    .post(function(req, res){

        console.log('Auth request recieved');

        // Get the user name
        var user = req.body.userName;

        var aToken = getToken(user);

        res.json({

            'token':'a_token'
        });
    });

app.use('/api', router);

app.listen(port);

Метод login пытается получить req.body.userName - однако req.body всегда пуст. Я видел другие случаи SO, описывающие такое поведение, но ни один из связанных ответов не применим здесь.

Спасибо за помощь.

Ответы

Ответ 1

В общем, экспресс-приложение должно указать соответствующее промежуточное программное обеспечение body-parser, чтобы req.body содержало тело.

[Изменено]

  • Если вам нужен синтаксический анализ данных формы с кодировкой url (non-multipart), а также JSON, попробуйте добавить:

    // Put this statement near the top of your module
    var bodyParser = require('body-parser');
    
    
    // Put these statements before you define any routes.
    app.use(bodyParser.urlencoded());
    app.use(bodyParser.json());
    

    Сначала вам нужно добавить body-parser в свойство dependencies вашего package.json, а затем выполнить npm update.

  • Чтобы обрабатывать данные из нескольких частей, тег bodyParser.urlencoded() не работает. См. предлагаемые модули здесь для разбора многочастных тел.