NashPL
NashPL

Reputation: 481

Express post do not post data leaving req.body undefined

I was trying to write some test which will emulate the post, but I have realised that nothing is posting. After further debugging, I realised that req.body is always undefined. Question is where did I make a mistake and how do I fix it. I seems that the problem is somewhere in the app.js file with order how the middleware loads but I can not figure it out where.

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;

Upvotes: 0

Views: 44

Answers (1)

peteb
peteb

Reputation: 19428

Your adding your bodyParser middleware to your server after you’ve added your routes. This is because express executes middleware(which includes routers since they are also middleware) in the order which they were added via .use().

Just move your router registration line:

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

After your last middleware and before your 404 NOT FOUND handler.

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));
});

Upvotes: 1

Related Questions