req.session获取不到

我又来了...我想在获取到Access_token后把它保存在session中;下面这一步是获取到了。

router.route("/fanfou").get(function(req,res){ 
    res.render("fanfou",{title:'fanfou'});
}).post(function(req,res){                        
    var username = req.body.username;  
    var password= req.body.password;
    oa.getXAuthAccessToken(username, password, function (error, oauth_token, oauth_token_secret, results) {
      if (error)
        console.log(error);
      else
      {
        req.session.oauth_token = oauth_token;
        req.session.oauth_token_secret = oauth_token_secret;
        var options={
          url:'http://api.fanfou.com/statuses/home_timeline.json',
          oauth_token:req.session.oauth_token,
          oauth_token_secret:req.session.oauth_token_secret
        }
        oa.get(options,function(error,data){
            if(error)
            {
              res.json({
                error:error
              }); 
            }
            else{
              res.json({
                result:data,
                auth_token:req.session.oauth_token
              }); 
            }
        }); 
      }  
    });     
});

但是到了这一步又获取不到了。不知道哪里出了问题,还请大神指教

router.route("/fanfouget").get(function(req,res){ 
    res.render("fanfouget",{title:'fanfouget'});
}).post(function(req,res){  
     console.log('req.session.oauth_token'+req.session.oauth_token)                      
    var options={
      url:'http://api.fanfou.com/favorites/id.json',
      oauth_token:req.session.oauth_token,
      oauth_token_secret:req.session.oauth_token_secret
    }
    oa.get(options,function(error,data){
       if(error)
       {
         res.json({
           error:error
         }); 
         console.log(error);
       }
       else{
         res.json({
           result:data
         }); 
         console.log(data);
       }
   });    
});

而且我在app.js添加这段代码检测req.session ,一直检测不到。

app.use('/',function(req,res){
  res.send('检测token');
  if(req.session.oauth_token){
      console.log('token存在');
  }else{
    req.session.oauth_token=11112;
    console.log(req.session.oauth_token);
  }
})
阅读 7.1k
3 个回答

req.session 依赖中间件,expresjs 默认没有提供这个对象

如果确认已经加载 session 中间件,可用通过环境变量开启 session 的 debug 日志。

DEBUG=express-session node app.js

node app.js 只是一个启动示意

谢谢邀请,不过后端我一直在用 .NET,对 Express 了解有限。

不过既然 express 的 session 需要中间件支持,建议你检查一下 session 的实现方式有没有问题,比如说是内存实现、服务器实现还是数据库实现,各种实现在存取方面是否存在问题。

泻药。

你这个问题描述的太模糊,而且给的信息太少,很难判断。 我只能分析下了。

首先可以明确你的中间件起作用了,要不你拿不到req.session。

然后,我发现,你的第一步,不是取值,是给req.session 添加了一个key值。这个key值应该是存到内存里面的,然后下次访问的时候可以拿到。

你的问题是没有拿到,这个时候,会不会,在两次中间,node重启了,如果重启,内存里面的数据就丢失了,自然是拿不到的。

如果还无法排除,你可以使用 node-inspector 调试一下,看看哪里出问题了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题