Nodejs 求一个mongodb 存储 session的模块
Nodejs 求一个mongodb 存储 session的模块
各位前辈!网上有找过,但是不确定是否好用也不确定是否过时,N多个不确定,所以在这里发帖。 我想用mongo 存储session 不知道有没有比较好的模块可以推荐一下? 先谢过~
当然,使用 MongoDB 来存储 Session 是一个非常常见的需求,尤其是在构建高并发或分布式应用时。Node.js 社区提供了几个成熟的模块来实现这一功能。其中最常用的是 connect-mongo
和 express-session
结合使用。
推荐的模块
express-session
: 这是一个用于 Express.js 的会话中间件,它提供了基本的会话管理功能。connect-mongo
: 这个模块专门用于将会话数据存储到 MongoDB 中。
示例代码
首先,确保你已经安装了所需的依赖:
npm install express express-session connect-mongo mongodb
然后,在你的 Node.js 应用中配置会话存储:
const express = require('express');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');
const app = express();
// 配置 Mongoose 连接到 MongoDB
mongoose.connect('mongodb://localhost:27017/myapp', {
useNewUrlParser: true,
useUnifiedTopology: true
});
// 配置会话存储
app.use(session({
secret: 'your_secret_key',
resave: false,
saveUninitialized: false,
store: new MongoStore({ mongooseConnection: mongoose.connection })
}));
app.get('/', (req, res) => {
if (req.session.views) {
req.session.views++;
res.setHeader('Content-Type', 'text/html');
res.write(`<p>Views: ${req.session.views}</p>`);
res.end();
} else {
req.session.views = 1;
res.end('Welcome to the session demo. Refresh!');
}
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
解释
-
Mongoose 连接:
- 使用
mongoose.connect()
方法连接到 MongoDB 数据库。 - 确保使用了
useNewUrlParser
和useUnifiedTopology
以避免警告信息。
- 使用
-
会话配置:
- 使用
express-session
中间件配置会话。 - 设置
secret
作为签名密钥,以确保会话数据的安全性。 - 使用
MongoStore
将会话数据存储到 MongoDB 中。
- 使用
-
会话处理:
- 在路由中检查会话变量
views
,并进行相应的操作。
- 在路由中检查会话变量
通过这种方式,你可以将会话数据持久化到 MongoDB 中,从而提高应用的可扩展性和可靠性。希望这对你有所帮助!
express-session—> https://github.com/expressjs/session
我写的代码i这样的
var MongoStore = require('connect-mongodb');
var MyMongo = require(__dirname+'/conDB.js').MyMongo;//这个中间件 是我自定义的链接mongodb 模块
var db = new MyMongo('localhost', 27017, 'user');
var session = require('express-session')
app.use(session({ store: new MongoStore({db: db}), cookie: {maxAge: 60000 * 20},secret: 'foo' }));
但是这样写的话server 报错了, C:\Users\hc>node C:\Users\hc\Desktop\node_dian\server.js express-session deprecated undefined resave option; provide resave option Deskto p\node_dian\server.js:19:10 express-session deprecated undefined saveUninitialized option; provide saveUnini tialized option Desktop\node_dian\server.js:19:10 @ townmi
var session = require(‘express-session’); var MongoStore = require(‘connect-mongo’)(session);
app.use(logger(‘dev’)); app.use(bodyParser.json()); app.use(bodyParser.urlencoded()); app.use(express.static(path.join(__dirname, ‘…/public’))); app.use(cookieParser(‘metro’)); app.use(session({cookie:{maxAge:3600000},secret:secretkey,store:new MongoStore({db:secretkey})})); app.use(routes);
其实我就想说。你怎么就不能看下README.MD再来。 express4.x+的变更。
npm和官方的Github都写清楚了的。。。
你可以使用 connect-mongo
这个模块来实现将 Session 存储到 MongoDB 中。这个模块已经得到了广泛的使用,并且维护得比较好,应该能够满足你的需求。
示例代码
首先,你需要安装 express-session
和 connect-mongo
:
npm install express-session connect-mongo
然后,你可以按照以下方式配置 Session 存储:
const express = require('express');
const session = require('express-session');
const MongoStore = require('connect-mongo');
const app = express();
app.use(session({
secret: 'your-secret-key', // 用于加密 session ID 的密钥
resave: false,
saveUninitialized: false,
store: MongoStore.create({
mongoUrl: 'mongodb://localhost:27017/your-database-name', // MongoDB 的连接字符串
}),
cookie: {
maxAge: 60 * 60 * 1000, // session 有效期为 1 小时
},
}));
app.get('/', (req, res) => {
req.session.views = (req.session.views || 0) + 1;
res.send(`You visited this page ${req.session.views} times`);
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
解释
-
安装依赖:
express-session
是 Express.js 的一个中间件,用于处理会话。connect-mongo
是express-session
的一个适配器,用于将 session 数据存储到 MongoDB 中。
-
配置 Session:
secret
是用于加密 session ID 的密钥,必须保密。resave
和saveUninitialized
控制 session 的保存行为。store
使用MongoStore
将 session 数据存储到 MongoDB 中。cookie.maxAge
设置 session 的有效期。
-
使用 Session:
- 在路由中通过
req.session
访问或修改 session 数据。
- 在路由中通过
这样,你就成功地将 session 存储到了 MongoDB 中。希望这对你有帮助!