Nodejs-Req.body undefined в сообщении с express 4.x

Я использую промежуточное ПО body-parser для кодирования значений формы, чтобы получить объект req.body. Но когда я отлаживаю свой код, выясните, что req.body - undefined. Вот мой код

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));

Слушайте запрос на отправку

app.post('/newCategory', function (req,res) {

            //express attached the form encoded values into body
            var categoryName = req.body.categoryName;
        });

Html Form

<form action="/newCategory" role="form" method="post" class="form-inline">
    <input type="text" name="categoryName" placeholder="Category name" class="form-control" />
    <input type="submit" value="New Category" class="btn btn-primary" />
</form>

Ответ 1

Просто столкнулся с той же проблемой. Похоже, я разрешил свою проблему, переместив мой код на карту маршрутов после строки с urlencoded. Я теперь вижу req.body в сообщении.

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


// Map routes
var controllers = require("./controllers");
controllers.init(app);

Ответ 2

Это решило проблему для меня

var bodyParser = require('body-parser');
var app=express();
app.use(bodyParser.urlencoded());
app.use(bodyParser.json());

Надеемся на эту помощь

Ответ 3

Если вы используете urlencoded с { extended:false }, req.body вернет необработанную исходную строку из формы categoryName=test. Значение req.body.categoryName будет undefined.

Попробуйте передать true, чтобы он мог анализировать данные формы с помощью qs-модуля.

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

Ответ 4

Я заметил, что порядок очень важен. Обычно маршрутизатор должен быть объявлен в конце перед запуском сервера. Например: 1.i импортировать необходимые файлы

var express            = require("express");
var bodyParser         = require("body-parser");
var morgan             = require("morgan");
var db              = require("./db.js");

var app                = express();

2.i объявить другие вещи

app.set("port", process.env.PORT || 3000);

//app.use(express.static(__dirname + '/public'));
app.use(morgan('dev') ); // Log every request to console
app.use(bodyParser.urlencoded({
    extended: true
}));

app.use(bodyParser.json());

3. ПОСЛЕ ВКЛЮЧЕНИЯ МАРШРУТОВ - самый важный шаг

var routes = require('./routes/routes');
routes(app);   //routes shall use Express
  1. запустите сервер

    app.listen(app.get( "port" ), function() {   console.log( "Экспресс-сервер, прослушивающий порт" + app.get( "порт" )); });

И тогда это сработает. Я не уверен, почему, но после того, как это случилось, я немного усвоил урок.

Ответ 5

Поскольку модуль body-parser используется для синтаксического анализа тела и URL-адресов, его следует вызывать перед любым вызовом "req.body..."

var bodyParser = require("body-parser");
///////req.body is undefined here
//extended: false means you are parsing strings only (not parsing images/videos..etc)
app.use(bodyParser.urlencoded({extended: false});
///////you req.body is working here (module below is using req.body)
app.use("/", module);
app.post('/newCategory', function (req,res) {
     var categoryName = req.body.categoryName;
});