expressjs TypeError:无法设置undefined的属性'session'

时间:2014-06-12 03:00:43

标签: javascript node.js express

尝试运行时出现此错误启动带有node server.js的快速服务器,我似乎无法弄清楚原因是什么。我相信我已经使用Express 4.0更新了我的应用程序,但也许有人可以在这里指出我的错误:

/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

以下是相关代码:

在server.js中......只是一些依赖项

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

。 。

以下是我的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());

。 。

这是我的快车路线

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

。 。

api.js

只是一些依赖

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

。 。

这是我的简单注销功能......

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

1 个答案:

答案 0 :(得分:1)

哇,我知道了。错误的方式:

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

正确的方式:

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