Express req.body undefined, routes after bodyParser doesn't work

I have no idea why in programming there are so many damn errors and issues even for basic tasks. Here is my code, it refuses to work no matter how many wacky positional changes I make.

var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var app = express();
var store = require('./routes/store');

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

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

app.get('/', function(req, res){
  res.render('home', {title: 'Ninja Store'})
});

app.post('/', function(req, res) {
    username = req.body.username || 'Anonymous';
    req.session.username = username;
    res.redirect('/');
});

It keeps saying

Cannot set property 'username' of undefined

Any help is appreciated, thanks.

I think here the req.session is undefined, not req.body. Because it's property setting error.

If it req.body will be undefined it will throw error of property reading.

Cannot read property 'username' of undefined.

You should use express-session middleware to overcome this problem. I hope this help.

I've already answered very same question check it you should just use: app.use(express.cookieSession());