如何在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){}