Node.js / Экспресс-форма сообщения req.body не работает - PullRequest
28 голосов
/ 23 сентября 2011

Я использую экспресс и не могу получить данные формы из bodyParser. Независимо от того, что я делаю, это всегда выглядит как пустой объект. Вот мой экспресс-сгенерированный код app.js (единственное, что я добавил, это маршрут app.post внизу):

var express = require('express');

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(app.router);
    app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
});

app.configure('production', function(){
    app.use(express.errorHandler()); 
});

// Routes

app.get('/', function(req, res){
    res.sendfile('./public/index.html');
});

app.post('/', function(req, res){
    console.log(req.body);
    res.sendfile('./public/index.html');
});

app.listen(3010);

Вот моя HTML-форма:

<!doctype html>
<html>
  <body>
<form id="myform" action="/" method="post" enctype="application/x-www-form-urlencoded">
  <input type="text" id="mytext" />
  <input type="submit" id="mysubmit" />
</form>
  </body>
</html>

Когда я отправляю форму, req.body является пустым объектом {}

Стоит отметить, что это происходит, даже если я удаляю атрибут enctype из тега формы

... Что-то я упускаю / делаю неправильно?

Я использую узел v0.4.11 и экспресс v2.4.6

Ответы [ 2 ]

36 голосов
/ 23 сентября 2011
<form id="myform" action="/" method="post" enctype="application/x-www-form-urlencoded">
  <input type="text" name="I_appear_in_req_body" id="mytext" />
  <input type="submit" id="mysubmit" />
</form>

Тело сообщения HTTP - это хэш ключа / значения всех элементов управления формы с атрибутом name, а значением является значение элемента управления.

Вам нужно дать имена всем вашим входам.

3 голосов
/ 05 июня 2013

Это также связано с типом контента. см. объект console.log (req).

'content-type': 'application/json; charset=UTF-8’  // valid.

'content-type': 'application/JSON; charset=UTF-8’  // invalid & req.body would empty object {}.

Чтобы проверить тип содержимого по console.log (req.is ('json')) // вернуть true / false

Я думаю, что 'charset = UTF-8' ничтожно мал в приведенном выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...