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()
не работает. См. предлагаемые модули здесь для разбора многочастных тел.
Ответ 2
Чтобы обрабатывать запрос multipart/form-data, поддерживающий загрузку файлов, вам необходимо использовать модуль multer. ссылка npm для промежуточного программного обеспечения multer