要在Express应用程序中实现会话持久化,可以使用session中间件结合某种存储引擎来存储会话数据。以下是使用express-session和connect-mongo存储引擎的示例代码解决方法:
npm install express-session connect-mongo
const express = require('express');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/sessiondb', { useNewUrlParser: true, useUnifiedTopology: true });
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB 连接错误:'));
app.use(session({
secret: 'your-secret-key',
resave: false,
saveUninitialized: true,
store: new MongoStore({ mongooseConnection: db })
}));
在这里,你可以根据需要调整session配置。secret
是一个用于签署session ID的秘密字符串。
app.get('/login', (req, res) => {
req.session.username = 'user123';
res.send('登录成功!');
});
app.get('/dashboard', (req, res) => {
if (req.session.username) {
res.send('欢迎 ' + req.session.username + '!');
} else {
res.send('请先登录!');
}
});
app.get('/logout', (req, res) => {
req.session.destroy();
res.send('已注销!');
});
在这个例子中,当用户访问/login路由时,会将用户名存储在req.session中。然后,当用户访问/dashboard路由时,会检查req.session中的用户名是否存在来判断用户是否已登录。最后,当用户访问/logout路由时,会销毁会话。
通过以上步骤,你就可以在Express应用程序中实现会话持久化了。在每个请求中,会话数据将存储在MongoDB中,以便在部署后保持持久化。