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

Не удается получить тело POST из запроса с помощью Express.js

Я работаю над API с NodeJS и Express (и больше таких вещей, как mongo, сокеты и т.д.), но я застрял на очень простом шаге, я верю, я просто пытаюсь получить информацию из POST req, но я получаю сообщение об ошибке при попытке доступа к req.body

Вот что у меня есть:

var express     = require('express'),
    http        = require('http'),
    path        = require('path'),
    fs          = require('fs'),
    io          = require('socket.io');
    dynroute    = require('dynroute');

var app = express();
app.set('port', process.env.PORT || 3999);
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(app.router);
app.use(express.bodyParser());

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

    console.log(JSON.stringify(req.body));
    res.send(req.body.self);
});

http.createServer(app).listen(app.get('port'), function ()
{
    console.log('App Server is now running at:' + app.get('port'));     
});

На console.log(JSON.stringify(req.body)); я получим undefined, а на res.send(req.body.self); получаем TypeError: Cannot read property 'self' of undefined

Я искал этот тип ошибок, и обычно проблема заключается в том, что люди не включают в себя app.use(express.bodyParser()); промежуточное программное обеспечение, я также пытался использовать app.use(express.urlencoded()); и app.use(express.json());, также не работал.

Если я делаю a console.log(req), я могу видеть весь объект, но я не вижу body или любого содержимого, которое я передаю при выполнении запроса POST от клиента (я передаю его как JSON).

* Я знаю, что мог бы использовать restify или sails.js для создания API в Node, но я хочу делать все самостоятельно, поэтому я могу извлечь уроки из опыта.

Спасибо

EDIT:

Мне пришлось установить промежуточное ПО bodyparser перед промежуточным программным обеспечением app.router, которое исправит его!

4b9b3361

Ответ 1

Переместите промежуточное ПО bodyParser над промежуточным программным обеспечением router!

var app = express();
app.set('port', process.env.PORT || 3999);
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(app.router);

Ответ 2

Content-Type = "application/json" должен быть одним из Request Headers

Ответ 3

BodyParser больше не связан с Express

npm install body-parser
var bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));

Ответ 4

Для меня примечание @kevinblanco: "Я должен был установить промежуточное ПО bodyparser перед промежуточным программным обеспечением app.router, чтобы исправить это!" сделал это для меня. Введя его в отдельный ответ, так как он похоронен внизу.

Ваш код должен выглядеть примерно так:

app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// My routing here