Nodejs session-mongoose 用了这个存储session 为什么无法写值
Nodejs session-mongoose 用了这个存储session 为什么无法写值
session-mongoose 用了这个存储session 为什么 req.session.user = user;
写不进去值呢
Node.js session-mongoose 用了这个存储session 为什么无法写值
在使用 session-mongoose
存储 Node.js 的 session 数据时,可能会遇到一些问题导致无法正确写入 session 值。以下是一个可能的解决方案以及相关的示例代码。
问题分析
session-mongoose
是一个用于将 session 数据存储到 MongoDB 的中间件。如果你发现无法通过 req.session.user = user;
来写入 session 值,可能是由于以下几个原因:
- 会话未初始化:确保在写入 session 值之前,会话已经被正确初始化。
- 中间件顺序:确保
express-session
和session-mongoose
中间件的顺序正确。 - 错误处理:检查是否有任何错误发生,例如数据库连接问题等。
示例代码
下面是一个完整的示例代码,展示了如何配置和使用 session-mongoose
存储 session 数据,并成功写入 session 值。
const express = require('express');
const session = require('express-session');
const connectMongo = require('connect-mongo');
const app = express();
// 配置 MongoDB 连接
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true });
// 使用 connect-mongo 创建 session 存储
const MongoStore = connectMongo.create({ mongoUrl: 'mongodb://localhost:27017/mydatabase' });
app.use(session({
secret: 'your-secret-key',
resave: false,
saveUninitialized: false,
store: MongoStore,
}));
app.get('/', (req, res) => {
// 检查 session 是否存在
if (!req.session.user) {
req.session.user = { name: 'John Doe' };
}
// 将 session 数据写入响应
res.send(req.session.user);
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
解释
-
安装依赖:
express
: Web 应用框架。express-session
: 用于管理 session。connect-mongo
: 将 session 存储到 MongoDB。mongoose
: MongoDB ODM。
-
配置 MongoDB:
- 使用
mongoose
连接到本地 MongoDB 数据库。
- 使用
-
配置 session:
- 使用
express-session
和connect-mongo
创建 session 存储。 - 设置
secret
、resave
和saveUninitialized
参数。
- 使用
-
设置路由:
- 在
/
路由中,检查req.session.user
是否已存在。如果不存在,则将其设置为{ name: 'John Doe' }
。 - 返回当前的
req.session.user
。
- 在
-
启动服务器:
- 监听端口 3000 并启动服务器。
通过上述步骤,你应该能够成功地使用 session-mongoose
存储 session 数据并写入 session 值。
用session-mongoose存储session 在app的中间件里要使用 app.use(express.cookieParser());
使用了,还是不行
var store = new SessionStore({ url: “mongodb://192.168.62.213/session”, interval: 120000 });
app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser());
app.use(express.session({ secret : ‘shiqiliang’, store: store, cookie: { maxAge: 900000 } }));
这么配置好以后 如果要存储一个值到session的话怎么操作,req.session.user = user;是这样就自动存到mongo的数据库里面了吗?