TypeError: Cannot set property 'title' of undefined 为什么提示req.session.title 的title找不到????
发布于 2年前 作者 zcl521ss 5744 次浏览
    var express = require('express');
    var RedisStore = require('connect-redis')(express);
    var app=express();
    app.configure(function ()  {
        app.set('views', __dirname + '/views');
        app.set('view engine', 'jade');
        app.set('view options', {
            layout: true
        });
            app.use(express.methodOverride());
        app.use(express.bodyParser());
        app.use(express.cookieParser());
        app.use(express.session({
            secret: 'keyboard cat',
            store: new RedisStore()
        }));
    
        app.use(express['static'](__dirname + '/public'));
        app.use(app.router);
    });
    require("./router")(app);   
    app.listen(process.env.PORT);  

index.js

var index=function(req,res,next){    
        req.session.title="首页";
        res.render('index',{
            session:req.session
            });       
        };        
    };

提示req.session.title="首页";TypeError: Cannot set property ‘title’ of undefined

12 回复

试试看 res.render('index’,{ session:req.session, title : “首页” });
};

不行,其实我们想问的是 req.session.xxx="yyyyy" 就会提示错误,就算不render也会出错, 像var RedisStore = require('connect-redis')(express); 你是怎么用的?这里

app.use(express.cookieParser());
        app.use(express.session({
            secret: 'keyboard cat',
            store: new RedisStore()
        }));

怎么设置?我都是按照网上那样复制上去的,结果总是出错

@zcl521ss redis我还没用过,我用的是mongodb,不过我感觉是不是需要一些数据库的配置信息没有加上…抱歉不能帮上你了

@gelihai 不过还要谢谢你

调整一下use的顺序试一下,我的也遇到过这种问题,我的是把app.use(app.router);放到session之前就会undefined,之后就好了,具体为什么我还没追代码,你可以试下把bodyParser、cookie、session放到最前面

试下面:

redis-cli ping

有没有看到: PONG

这个是在cloud9 上放着

看来,redis server没启动,不如用这个试看看:

app.use(express.cookieParser('your secret here'));
app.use(express.session());

就是这个, 我也遇到楼主的问题, 这个回答能搞定. 太感谢了!

我也遇见了同样的问题,并且把session调到后面了,可是typeof req.session的时候还是undefined app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.static(path.join(__dirname, ‘public’))); app.use(express.cookieParser(‘keyboard’)); app.use(express.session({ secret: 'blog’, key: 'blog’, store:new RedisStore(), cookie: {maxAge: 1000 * 60 * 60 * 24 * 30}//30 days })); app.use(app.router);

然后在一个方法里想设req.session.flag的时候设不进去,后面输出下面信息的时候是undefind,求帮助~~ console.log(typeof req.session);

跟楼主一样的问题,现在解决了,网上的例子都是store:new RedisStore(),太坑了,其实它里面还里要写host跟post的,不然它根本连不上redis,改成store:new RedisStore({host:’172.19.103.14’,port:’6379’}),把里面的host跟post改成你自己的。

谢谢,为什么是这样呢?

回到顶部