user1586843
user1586843

Reputation:

expressjs TypeError: Cannot set property 'session' of undefined

Getting this error when trying to run start my express server with node server.js, and I can't seem to figure out what is the cause. I believe that I have made my app up to date with express 4.0, but maybe someone can point out my error here:

/home/trevor.panhorst/public_html/server/routes/api.js:236
    req.session = null;
                ^
TypeError: Cannot set property 'session' of undefined
    at Object.exports.logout         (/home/trevor.panhorst/public_html/server/routes/api.js:236:17)
    at Object.<anonymous> (/home/trevor.panhorst/public_html/server/server.js:96:34)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:906:3

Here's the relevent code:

In server.js... just some dependencies

var express = require('express'), 
    routes = require('./routes'), 
    api = require('./routes/api'),
    connString = "postgres://...:...@...:5432",
    cookieParser = require('../node_modules/cookie-parser'),
    errorHandler = require('../node_modules/errorhandler'),
    bodyParser = require('../node_modules/body-parser'),
    session = require('../node_modules/express-session');
 var app = module.exports = express();

. . .

Here are my set/use declerations

app.set('port', 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(require('connect').bodyParser());
app.use(allowCrossDomain);
app.use(express.static(__dirname + '../'));
app.use(cookieParser());  
app.use(session());

. . .

and here are my express routes

// clear cookie session on logout
app.post(baseUrl + 'logout', api.logout());

// redirect all others to the index (HTML5 history)
app.get('*', routes.index);

// Start server

app.listen(app.get('port'), function () {
    console.log("Express server listening on port %d in %s mode",     
    app.get('port'), app.settings.env);

. . .

in api.js

just some dependencies

var pg = require('../../node_modules/pg'),
    session = require('../../node_modules/express-session'),
    connString = "postgres://...:...@...:5432";

. . .

and here is my simple logout function...

  exports.logout = function(req, res){
        req.session = null;
    };

Upvotes: 0

Views: 3009

Answers (1)

Lellansin
Lellansin

Reputation: 912

Wow, I got it. wrong way:

app.post(baseUrl + 'logout', api.logout());

right way:

app.post(baseUrl + 'logout', api.logout);

Upvotes: 1

Related Questions