如何设置mongoose和connect-mongo?

Pio*_*Pio 1 connect mongoose mongodb node.js express

我有一个错误设置TTL在开始我的应用程序时的错误express。也许问题是因为我通过不同的连接将同一数据库用于会话和数据库操作。

因此,如果我想通过中间件将我的会话存储在 mongodb 中并使用 mongo 作为我的应用程序特定数据的数据库,那么它有一个特定的要求序列connect-mongo并且mongoose需要得到尊重connect-mongo

目前我的应用程序看起来像这样:

App.app.use(express.session({
store: new MongoStore({
    db: settings.cookie.db,
    host: settings.cookie.host,
    port: settings.cookie.port
}),
    secret: settings.cookie.secret
}))
Run Code Online (Sandbox Code Playgroud)

后来我设置启动 mongo 的连接:

 function connect(connectionString) {
     mongoose.connect(connectionString)

     var db = mongoose.connection
     db.on('error', console.error.bind(console, 'connection error'))
     db.once('open', function callbck() {
        console.log('Mongoose connected at: ', connectionString)
       })
     } 
Run Code Online (Sandbox Code Playgroud)

没有错误日志分开

另外,当我关闭我的应用程序时,我如何正确拆除 mongo 连接(假设从命令行)?对于这个问题,我在这里找到了我认为的答案。

小智 6

首先我创建了一个 sessionStore 模块

var mongoose = require('mongoose'),
express = require('express'),
MongoStore = require('connect-mongo')(express),
sessionStore = new MongoStore({mongoose_connection: mongoose.connection});
module.exports = sessionStore;
Run Code Online (Sandbox Code Playgroud)

然后我将它包含在应用程序中

sessionStore = require('libs/sessionStore');
Run Code Online (Sandbox Code Playgroud)

最后

app.use(express.session({
  secret: config.get('session:secret'),
  key: config.get('session:key'),
  cookie: config.get('session:cookie'),
  store: sessionStore
}));
Run Code Online (Sandbox Code Playgroud)

那是配置

"session": {
    "secret": "secret",
    "key": "connect.sid",
    "cookie": {
        "path": "/",
        "httpOnly": true,
        "maxAge": null
    }
},
Run Code Online (Sandbox Code Playgroud)