request.session undefined。 nodeJS表达

时间:2014-07-24 10:07:57

标签: node.js session express

关于这个话题有很多问题,但没有一个可以解决我的问题, 我开发了一个快速应用程序,我的身份验证方法是写入会话对象并使用redis-store。它在开发过程中完美无缺,

但我第一次部署我的网站进行一些测试(使用模数)我得到一个错误,req.session未定义。当我在localhost上运行时,代码仍然可以正常工作。

这实际上是我的第一个网络项目,有很多明显的要点和技巧,我不知道,必须通过这种方式学习。也许我在这里遗漏了一些简单而明显的东西,不知道!

package.josn依赖项:

  "dependencies" : {
        "express"    : "~3.4.4",
        "mongoose"   : "~3.6.2",
          "socket.io":"1.x" ,
        "bcrypt-nodejs" : "0.0.3",
        "connect-redis": "1.4.x" ,
        "body-parser" : "1.4.3" ,
        "cookie-parser": "~1.0.0",
        "express-session": "~1.0.0"
    } ,   

应用配置

var express = require('express') ;
var app = express() ;
var http = require('http') ;
var io = require('socket.io') ;
var bodyParser   = require('body-parser');
var mongoose = require('mongoose') ;
var mongoose1 = require('mongoose') ;
var bcrypt = require('bcrypt-nodejs') ;
var PORT = process.env.PORT || 8080 ;
var server = http.createServer(app) ;
var RedisStore = require('connect-redis')(express);

app.configure(function () {
    app.use(express.static(__dirname + "/static" )) ;
    app.use( express.cookieParser() );
    app.use(express.bodyParser()) ;
    app.use(express.session({
        store: new RedisStore({
            host: 'localhost',
            port: 6379,
            db: 2,
            pass: '****'
        }),
        secret: '12345qwr'
    })
    );

}) ;

当我到达req.session。[]在我的服务器中,应用程序崩溃并重启,因为req.session未定义。 例如,当我点击登录按钮并将帖子请求发送到" / api / login"或.. ..

    app.post('/api/login' , function (req, res) {
        UserDBModel.findOne({ username : req.body.user } , function (err, user) {
            if (err) { res.json(err) ; }
            if ( user ) {
                if ( bcrypt.compareSync( req.body.pass ,  user.password ) ) {
                    req.session.Auth = { username : user.username , password : user.password } ;
//app crashes here with error : TypeError: Cannot set property 'Auth' of undefined

    }) ;

PS。要进行身份验证,我会存储一个" Auth"我的会话中的对象,包含登录用户的用户名和哈希密码。

2 个答案:

答案 0 :(得分:1)

而不是app.use(express.session(尝试使用:app.use(express.cookieSession());,而request.session对象可以访问...

答案 1 :(得分:1)

确保您正在运行redis服务

sudo service redis-server start