Express.js 中使用 connect-mongo 模块存储会话

什么是 connect-mongo

connect-mongo 是一个可以用于连接 MongoDB 数据库的模块,它通过对 express-session 模块进行扩展,为 Express.js 应用程序提供了一个可靠的会话存储解决方案。

通常情况下,Session 会话数据会存储在内存中,这可能会导致内存占用过高,并且重启服务后就会失去所有的会话数据。使用 connect-mongo,我们可以将会话数据存储到 MongoDB 数据库中,这样我们就可以避免这些问题。

使用 connect-mongo 存储会话

在使用 connect-mongo 之前,我们需要先在项目中安装它,可以使用 npm 命令来安装,如下:

npm install connect-mongo --save

安装完毕之后,我们就可以结合 express-session 一起来使用它了。

首先,在项目中引入相应的模块:

const express = require('express')
const session = require('express-session')
const mongoStore = require('connect-mongo')(session)
const mongoose = require('mongoose')

然后,我们需要创建一个 session 存储的实例,同时将其作为参数传递给 express-session:

const app = express()

mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true })

const sessionStore = new mongoStore({
  mongooseConnection: mongoose.connection,
  ttl: 60 * 60, // Session 过期时间为 1 小时
})

app.use(session({
  secret: 'my_secret_key',
  resave: false,
  saveUninitialized: false,
  store: sessionStore,
}))

在上述代码中,我们传递给 mongoStore 构造函数的 mongooseConnection 参数是当前的数据库连接实例,ttl 参数指定 session 过期的时间。

示例代码

const express = require('express')
const session = require('express-session')
const mongoStore = require('connect-mongo')(session)
const mongoose = require('mongoose')

// 连接到 MongoDB 数据库
mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true })

// 创建 session 存储实例
const sessionStore = new mongoStore({
  mongooseConnection: mongoose.connection,
  ttl: 60 * 60, // session 过期时间为 1 小时
})

// 创建 Express.js 应用程序
const app = express()

// 配置 session 中间件
app.use(session({
  secret: 'my_secret_key', // session 加密密钥
  resave: false, // 没有修改不重新保存
  saveUninitialized: false, // 没有数据不保存
  store: sessionStore, // session 存储
}))

app.get('/', (req, res) => {
  if (req.session.views) {
    req.session.views++
  } else {
    req.session.views = 1
  }

  res.send('views: ' + req.session.views)
})

app.listen(3000, () => {
  console.log('Server is running at http://localhost:3000')
})

总结

使用 connect-mongo 存储会话可以帮助我们提高 Web 应用程序的性能和可靠性。本文中我们介绍了如何使用 connect-mongo,并给出了具体的代码示例,希望读者可以从中学习到有用的知识,并能够在自己的项目中使用该模块来提高应用程序的用户体验。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b06643add4f0e0ff9c0fcd