Тело сообщения маршрутизатора Express js в пользовательском модуле

Я создаю конечные точки REST API в Node.js как отдельный пользовательский модуль. В моем модуле, использующем экспресс-маршрутизатор, я создал все API.

Затем я включил этот пользовательский модуль в приложение Node.js.

Пока я вызываю get с параметрами, в этих маршрутизаторах я могу видеть значения этих параметров.

Но при выполнении почтового запроса я не могу получить тело POST в формате JSON.

Пользовательский модуль

1. index.js: -

module.exports = function(app){

        var express = require('express');
        var router = express.Router();
        var user = require('./lib/user')(router);
        app.use("/user", user);
    };

2. Библиотека/user.js: -

module.exports = function(router) {
    router.post('/create', function(req, res) {
           console.log(req.body);
    };

    return router;
};

Приложение Nodejs: -

Файл server.js имеет код ниже

var express = require('express');
var path = require('path');
var http = require('http');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var methodOverride = require('method-override');

var multer  = require('multer');

var app = express();

require('custommodule')(app);
app.use(express.static(path.join(__dirname, '/public')));
app.set('views', path.join(__dirname, 'public/views'));
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
app.use(logger('dev'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(methodOverride());

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
app.post('/test/create', function(req, res) {
           console.log(req.body);
    };

Затем, когда я делаю POST-запрос к http://localhost:3000/user/create с телом JSON , внутри журналов user.js отображается неопределенное значение для req.body. Но если я сделаю ниже вызов POST, тогда будет отображаться req.body.

http://localhost:3000/test/create

Как я могу получить req.body внутри lib\user.js?


person Mohan Raja    schedule 12.01.2017    source источник
comment
Вы используете почтальона или что-то в этом роде? Убедитесь, что при использовании вкладки необработанных данных вы также отправляете заголовок Content-type: application/json.   -  person LostJon    schedule 12.01.2017


Ответы (1)


Вы передали app своему пользовательскому модулю, прежде чем монтировать в него промежуточное ПО body-parser. поэтому он не знает, как заполнить req.body. так двигаться:

require('custommodule')(app);

после всех твоих app.use; или хотя бы после этих двух строк:

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

которые отвечают за заполнение req.body телами входящих сообщений.

person dNitro    schedule 12.01.2017
comment
Большое спасибо. Я сделал, как ты сказал. Теперь это работает. - person Mohan Raja; 13.01.2017