Подтвердить что ты не робот

Node.js Express express.json и express.urlencoded с формой submit

Компонентное пространство курьерской (или Connect) bodyParser отмечено устаревшим, и пользователям рекомендуется использовать вместо этого:

app.use(connect.urlencoded())
app.use(connect.json())  

Однако, когда я запускаю пример из Node.js в Action, я использую curl для заполнения формы, как предложено в книге:

curl -F entry[title]='Ho ho ho' -F entry[body]='santa loves you' http://abc:[email protected]:3000/api/entry

Это не работает. req.body не определен. Я что-то упускаю? Он отлично работает с bodyParser.

EDIT: РЕШЕНИЕ с Express 4

Разберите json следующим образом:

var bodyParser = require('body-parser');

...

app.use(bodyParser.json());

Разбирайте urlencoded тело таким образом:

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

Тогда нет предупреждения об устаревании. Расширение: true (по умолчанию) использует модуль qs, а false использует модуль querystring для синтаксического анализа тела.

Не используйте app.use(bodyParser()), это использование теперь устарело.

4b9b3361

Ответ 1

bodyParser на самом деле представляет собой состав трех посредников (см. документация и соответствующий исходный код): json, urlencoded и multipart:

  • json анализирует application/json органы запроса
  • urlencoded анализирует x-ww-form-urlencoded органы запроса
  • и multipart анализирует тела запросов multipart/form-data, что вас интересует.

Если вы укажете только json и urlencoded middlewares, данные формы не будут анализироваться каким-либо промежуточным программным обеспечением, поэтому req.body не будет определен. Затем вам нужно добавить промежуточное программное обеспечение, которое может анализировать данные формы, такие как грозный, busboy или многопартийный (как указано в connect документации).

Вот пример, используя multiparty:

var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
app.use('/url/that/accepts/form-data', multipartMiddleware);
app.post('/url/that/accepts/form-data', function(req, resp) {
    console.log(req.body, req.files);
});

Не забывайте, что, используя такие посредники, вы разрешаете всем пользователям загружать файлы на ваш сервер: тогда ваша ответственность - обрабатывать (и удалять) эти файлы.