【问题标题】:request.session undefined . nodeJS expressrequest.session 未定义。 nodeJS快递
【发布时间】:2014-09-15 20:10:14
【问题描述】:

关于这个话题有很多问题,但没有一个可以解决我的问题, 我开发了一个快速应用程序,我的身份验证方法是写入会话对象并使用 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 在 undefined 中。 例如,当我单击登录按钮并将发布请求发送到“/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”对象,其中包含登录用户的用户名和哈希密码。

【问题讨论】:

    标签: node.js session express


    【解决方案1】:

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

    【讨论】:

    • 我已经寻找这个问题的答案一段时间了,每个解决方案都对我不起作用,因为在这个问题的大多数其他实例中,编码器正在对其进行编码,以便 res 对象会响应在设置变量之前给客户端。对我来说根本不是这种情况,这似乎做得很好,非常感谢!
    【解决方案2】:

    确保你正在运行redis服务

    sudo service redis-server start
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多