问题描述
假设我有“家”路线和“食物”路线。在“ home”路由中,我从数据库中收集了用户数据,我想将用户名传递给“ food”路由。我想使用会话来做到这一点,但是我没有找到解决方案。在PHP中,使用
非常容易$_SESSION['username'] = username;
从Google那里我了解到,在node.js中我可以做类似的事情
const express = require('express');
const session = require('express-session');
const app = express();
var sess;
app.get('/',function(req,res){
sess=req.session;
sess.email; // equivalent to $_SESSION['email'] in PHP.
sess.username; // equivalent to $_SESSION['username'] in PHP.
});
但是我也了解到,对于该会话使用全局变量将不适用于多个用户。您将为所有用户收到相同的会话信息。 此人建议使用Redis,但需要安装其他软件。有什么更好的方法可以将数据保存到node.js中的会话变量,并将其传递到另一条类似于PHP的路由?
解决方法
您必须创建一个会话对象并将其传递给expressjs应用程序才能访问会话。
这是文档中的示例:
var app = express()
app.set('trust proxy',1) // trust first proxy
app.use(session({
secret: 'keyboard cat',resave: false,saveUninitialized: true,cookie: { secure: true }
}))
然后您可以从处理程序中的请求对象访问会话:
app.get('/',function(req,res,next) {
if (req.session.views) {
req.session.views++
res.setHeader('Content-Type','text/html')
res.write('<p>views: ' + req.session.views + '</p>')
res.write('<p>expires in: ' + (req.session.cookie.maxAge / 1000) + 's</p>')
res.end()
} else {
req.session.views = 1
res.end('welcome to the session demo. refresh!')
}
})