在Controller.js中未定义带有Express req.session的节点

时间:2018-06-27 03:19:30

标签: node.js

我是Node的新手,所以这很明显。在我应用程序的main.js文件中,我有一条带有回调功能的路由,该路由成功设置了用户的会话信息(UserID)。基本示例:

App.get("/setID", function(req,res){
      req.session.UserID = ‘Fred’;
      res.send(“User ID Set”);
 })

这可行,但是我想练习使用路由器和控制器组织代码。当我像这样将代码移至controller.js时:

 Exports.setSessionUserID = function(req,res){
      req.session.UserID = ‘Fred’;
      res.send(“User ID Set”);
 }

我收到一条错误消息,提示未定义req.session:

TypeError:无法设置未定义的属性'UserID'。

如果我注释了req.session行,则我确实成功获得了res.send,因此路由器正确地调用了此函数。

我相信controller.js具有main.js中存在的所有相关“需求”(bodyParser,Express会话)。

为什么从控制器调用theis函数与从main.js调用函数有什么不同(关于会话)?

1 个答案:

答案 0 :(得分:0)

这里唯一的问题是您试图在req.session上设置属性,而该属性本身就是undefined

// you can do 
Exports.setSessionUserID = function(req,res){
  req.session = { UserId: `Fred` }
  res.send(“User ID Set”);
}

一个例子

let req = {};
req.session = { UserId: `Fred` };
console.log(req.session.UserId);