如何在Node.js Express中检查会话?

我尝试检查Express 4中的会话是否存在:

if(req.session.user == undefined) {} 

它给我错误:

  Cannot read property 'user' of undefined 

我如何检查会话中是否存在值?

来源 :

如何使用Express Session?

在引用实际的代码之前,我想说一下关于快速会话模块的几句话。 要使用这个模块,你必须在你的项目中包含express。 像所有软件包一样,我们必须先包含它。

 server.js var express = require('express'); var session = require('express-session'); var app = express(); 

在此之后,我们必须初始化会话,我们可以通过使用以下来做到这一点。

 app.use(session({secret: 'ssshhhhh'})); 

这里“秘密”是用于cookie处理等,但我们必须把一些秘密来pipe理会话在Express中。

现在使用'request'variables可以将会话分配给任何variables。 就像我们在PHP中使用$ _SESSIONvariables一样。 例如

 var sess; app.get('/',function(req,res){ sess=req.session; /* * Here we have assign the 'session' to 'sess'. * Now we can create any number of session variable we want. * in PHP we do as $_SESSION['var name']. * Here we do like this. */ sess.email; // equivalent to $_SESSION['email'] in PHP. sess.username; // equivalent to $_SESSION['username'] in PHP. }); 

在创build像sess.email这样的会话variables之后,我们可以检查这个variables是否设置在其他路由器中,并且可以轻松地跟踪会话。

你不能没有任何中间件创build一个会议(我假设这是你已经尝试过)。

阅读快速会话中间件文档,在这里find:

https://github.com/expressjs/session

基本实施例:

创build一个会话:

 app.use(session({ genid: function(req) { return genuuid() // use UUIDs for session IDs }, secret: 'keyboard cat' })) 

阅读会议:

 // Use the session middleware app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }})) // Access the session as req.session app.get('/', function(req, res, next) { var sess = req.session if (sess.views) { sess.views++ res.setHeader('Content-Type', 'text/html') res.write('<p>views: ' + sess.views + '</p>') res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's</p>') res.end() } else { sess.views = 1 res.end('welcome to the session demo. refresh!') } }) 

您可以在网上find许多教程,例如:

https://www.thepolyglotdeveloper.com/2015/01/session-management-expressjs-web-application/

首先它取决于你正在使用的图书馆,也许一些图书馆有这样的实用程序,我假设你正在使用express-session

这只是好的:

 if(req.session.user){} 

他们是无用的:

 if(typeof req.session.user !== "undefined"){} if(typeof req.session.user !== "undefined" || req.session.user === true){} 

原因是req.session是一个对象,就像普通的对象一样:

 var obj = { name : "adam" } 

如果你试图获得它不存在和定义的obj.age ,那么这个对象的getter函数 ,首先检查它是否存在,如果不存在,它不会产生一个致命的错误 ,而是分配那个属性到未定义的值。

这很酷,所以obj.age得到的未定义 (JS undefined为一个值types),此外undefined是一个虚假的价值(当你强迫它布尔变成false,所以这是虚假的),这意味着你可以简单地检查它在条件像这样的陈述: if(obj.age){}