Nodejs 求一个mongodb 存储 session的模块

Nodejs 求一个mongodb 存储 session的模块

各位前辈!网上有找过,但是不确定是否好用也不确定是否过时,N多个不确定,所以在这里发帖。 我想用mongo 存储session 不知道有没有比较好的模块可以推荐一下? 先谢过~

7 回复

当然,使用 MongoDB 来存储 Session 是一个非常常见的需求,尤其是在构建高并发或分布式应用时。Node.js 社区提供了几个成熟的模块来实现这一功能。其中最常用的是 connect-mongoexpress-session 结合使用。

推荐的模块

  1. express-session: 这是一个用于 Express.js 的会话中间件,它提供了基本的会话管理功能。
  2. 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}`);
});

解释

  1. Mongoose 连接:

    • 使用 mongoose.connect() 方法连接到 MongoDB 数据库。
    • 确保使用了 useNewUrlParseruseUnifiedTopology 以避免警告信息。
  2. 会话配置:

    • 使用 express-session 中间件配置会话。
    • 设置 secret 作为签名密钥,以确保会话数据的安全性。
    • 使用 MongoStore 将会话数据存储到 MongoDB 中。
  3. 会话处理:

    • 在路由中检查会话变量 views,并进行相应的操作。

通过这种方式,你可以将会话数据持久化到 MongoDB 中,从而提高应用的可扩展性和可靠性。希望这对你有所帮助!


我写的代码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-sessionconnect-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');
});

解释

  1. 安装依赖

    • express-session 是 Express.js 的一个中间件,用于处理会话。
    • connect-mongoexpress-session 的一个适配器,用于将 session 数据存储到 MongoDB 中。
  2. 配置 Session

    • secret 是用于加密 session ID 的密钥,必须保密。
    • resavesaveUninitialized 控制 session 的保存行为。
    • store 使用 MongoStore 将 session 数据存储到 MongoDB 中。
    • cookie.maxAge 设置 session 的有效期。
  3. 使用 Session

    • 在路由中通过 req.session 访问或修改 session 数据。

这样,你就成功地将 session 存储到了 MongoDB 中。希望这对你有帮助!

回到顶部