Reputation: 7022
Im trying to post to a route in express 4, but when i try to log body i get undefined message, here are my configs:
/server.js
/* main module entry point */
'use strict';
var express = require( './server/node_modules/express' );
var bodyParser = require( './server/node_modules/body-parser' );
var env = require( './server/env' );
var app = module.exports = express();
app.use( require( './server/modules/auth' ) );
app.use( express.static( __dirname + '/client/' ) );
app.use( bodyParser.urlencoded( {
extended: true
} ) );
app.use( bodyParser.json() );
app.get( '/*', function ( require, response ) {
response.sendFile( __dirname + '/client/index.html' );
} );
app.listen( env.port, function () {
console.log( 'Listening to port ' + env.port );
} );
/server/modules/auth/index.js
module.exports = (function () {
var express = require('express'),
router = express.Router(),
signin = require('./signin.controller');
router.route( '/signin' )
.get( signin.get )
.post( signin.post );
return router;
})();
/server/modules/auth/sigin.controller.js
module.exports = (function () {
models = require( '../../database/models' );
function get( request, response ) {
models.users.findAll().then( function ( users ) {
response.json( users );
} );
console.log( 'Sign In' );
}
function post( request, response ) {
console.log( 'Sign In ' + request.body );//Returns "Sign In Undefined"
response.send('Signed In'+ request.body);
}
return {
get: get,
post: post
}
})();
Is there anything wrong in the code?, I'm using postman to test it:
The header i'm using is:
Content-Type: application/json
Upvotes: 2
Views: 4021
Reputation: 81
Starting from 4.16, feel free to use express.json()
instead of body-parse
, more detail: express.json vs bodyParser.json.
Upvotes: 1
Reputation: 23060
Order matters. Try this:
/* main module entry point */
'use strict';
var express = require( './server/node_modules/express' );
var bodyParser = require( './server/node_modules/body-parser' );
var env = require( './server/env' );
var app = module.exports = express();
app.use( express.static( __dirname + '/client/' ) );
app.use( bodyParser.urlencoded( {
extended: true
} ) );
app.use( bodyParser.json() );
app.use( require( './server/modules/auth' ) );
app.get( '/*', function ( require, response ) {
response.sendFile( __dirname + '/client/index.html' );
} );
app.listen( env.port, function () {
console.log( 'Listening to port ' + env.port );
} );
Basically you're telling express not to parse the body content until after the middleware in auth.js is run.
Upvotes: 2