在分离的模块nodejs内访问会话信息

时间:2013-03-11 21:58:51

标签: node.js session

我有app.js

var express = require('express')
  , routes = require('./routes')
  , MemoryStore = new express.session.MemoryStore
  , app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser('restservice'));
  app.use(express.session({store: MemoryStore, secret: '123456', key: 'sid', maxAge: 60000 }));
  app.use(routes);  
  app.use(app.router);
});

routes / index.js

var express = require('express')
  , tools = require('./../functions')
  , app = module.exports = express();

app.get('/user/:id',tools.isAdmin,function(req,res){
    console.log('isadmin');
});

和function.js

module.exports = {
  isAdmin: function (res,req,next) {
    if (req.session.level >= 16)
        next();
    else {
        res.json({result:-1});
    }
  }
};

所以我的问题是当我访问http://myadmin.com/user/3时出现错误req.session undefined

我怎样才能从functions.js视图中获取对会话信息的访问权?

2 个答案:

答案 0 :(得分:0)

app.js和index.js正在创建两个不同的应用程序,两个不同的express实例 - 两个不同的服务器。

由于您不需要另一个(索引不需要应用程序,而应用程序不需要索引),因此当您运行一个时,只有那个正在运行。如果运行node app,则只运行app.js,如果运行node index,则只运行index.js。

您应该查看express的github存储库中包含的基本快速应用示例:

https://github.com/visionmedia/express/tree/master/examples/mvc

答案 1 :(得分:0)

问题在于这一行

isAdmin: function (res,req,next) {

出于某种原因,我用req切换了res。随着

isAdmin: function (req,res,next) {

现在我可以获得会话信息。