Экспресс-сообщение не публикует данные, оставляя req.body неопределенным - PullRequest
0 голосов
/ 13 мая 2018

Я пытался написать какой-нибудь тест, который будет эмулировать сообщение, но я понял, что ничего не публикуется. После дальнейшей отладки я понял, что req.body всегда неопределен. Вопрос в том, где я допустил ошибку и как ее исправить. Мне кажется, что проблема где-то в файле app.js с порядком загрузки промежуточного программного обеспечения, но я не могу понять, где.

app.js

'use strict';
const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const bodyParser = require('body-parser');
const fs = require('fs');
const session = require('express-session');
const redis = require('redis');
const mongoose = require('mongoose');
const redisStore = require('connect-redis')(session);
const client = redis.createClient();

const app = express();

const _UTILS = require('./application/_UTILS');

const db = JSON.parse(fs.readFileSync('/srv/webkb_mean/config/configFiles/database.json', 'utf8'));

mongoose.connect('mongodb://' + db['mongodb']['url'] + '/webKB-main');
mongoose.Promise = global.Promise;



app.use(session({
    secret: _UTILS.getHashedValue(),
    // create new redis store.
    store: new redisStore({
        host: 'localhost',
        port: 6379,
        client: client,
        ttl: 36000
    }),
    saveUninitialized: false,
    resave: false
}));

require('./config/router')(app);

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({
    extended: false
}));

app.use(cookieParser());
app.use(bodyParser.urlencoded({
    extended: true
}))
app.use(bodyParser.json())
app.use(express.static(path.join(__dirname, 'views')));

app.engine('html', require('ejs').renderFile)



// catch 404 and forward to error handler
app.use(function(req, res, next) {
    next(createError(404));
});

// error handler
// app.use(function(err, req, res, next) {
//     // set locals, only providing error in development
//     res.locals.message = err.message;
//     res.locals.error = req.app.get('env') === 'development' ? err : {};
//
//     // render the error page
//     res.status(err.status || 500);
//     res.render('error');
// });
//


module.exports = app;

1 Ответ

0 голосов
/ 13 мая 2018

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

Просто переместите строку регистрации маршрутизатора:

require('./config/router')(app);

После вашего последнего промежуточного программного обеспечения и до вашего обработчика 404 NOT FOUND.

app.engine('html', require('ejs').renderFile)

require('./config/router')(app);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
    next(createError(404));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...