如何在node.js中创建会话变量并将其从一个路由传递到另一个路由?

问题描述

假设我有“家”路线和“食物”路线。在“ 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!')
    }
})