2014-03-18 111 views
3

只是无法找出这一个。我发现的关于快速会话的一切都说明它只是起作用,但是,对我而言并非如此。nodejs express req.session undefined

我的整个应用程序的配置

app.configure -> 
    app.set 'port', process.env.PORT || 3000 
    app.set 'views', path.join(__dirname, 'views') 
    app.set 'view engine', 'jade' 
    app.use express.favicon() 
    app.use express.logger('dev') 
    app.use express.json() 
    app.use express.urlencoded() 
    app.use express.methodOverride() 
    app.use app.router 
    app.use express.static(path.join(__dirname, 'public')) 
    app.use express.bodyParser() 
    app.use express.cookieParser() 
    sessionStore = new express.session.MemoryStore 
    app.use express.session secret: 'key', store: sessionStore 

req.session只是undefined。我想用它来进行用户认证 - 非常基本。出于某种原因,对我来说,这变得非常艰难。我正在使用express 3.5.0

我控制器ATM看起来是这样的:

class AuthenticationController 

    signUp: (req, res) -> 
    console.log req.body._id 
    console.log req.session 
    res.status(200).send req.body 

module.exports = AuthenticationController 

和路线:

format = require './middlewares/format' 
AuthenticationController = require './controller' 

class Routes 

    constructor: (app) -> 
    throw new Error('app undefined') unless app 
    @controller = new AuthenticationController 
    @app = app 
    route.apply @ for key, route of @routes 

    routes: 
    sign_up: -> 
     @app.post '/sign_up', format.onlyJSON, @controller.signUp 

module.exports = Routes 
+0

显示你使用'req'的代码? – Ali

+2

在会话中间件之前有'app.use app.router',所以所有的路由都将在会话建立之前处理。你为什么要这样订购? – loganfsmyth

+0

没想到这很重要,实际上...... –

回答

6

正如loganfsmyth建议刚动

app.use express.cookieParser() 
sessionStore = new express.session.MemoryStore 
app.use express.session secret: 'key', store: sessionStore 

app.use app.router以上,它只是点击。谢谢。