11

这是一个使用快速会话存储的简单连接,即使文本来自书中,它也会不断出现此错误。我很确定这与“new MongoStore”对象初始化有关。

var express = require('express'),
    expressSession = require('express-session');

var MongoStore = require('connect-mongo/es5')(expressSession);
var sessionStore = new MongoStore({
  host: '127.0.0.1',
  port: '27017',
  db: 'session'
});

var app = express()
    .use(expressSession({
      secret: 'my secret sign key',
      store: sessionStore
     }))
    .use('/home', function (req, res) {
      if (req.session.views) {
        req.session.views++;
      }
      else {
        req.session.views = 1;
      }
      res.end('Total views for you:' + req.session.views);
    })
    .use('/reset', function(req, res) {
      delete req.session.views;
      res.end('Cleared all your views');
    })
    .listen(3000);
4

4 回答 4

13

将 URL 添加到新的MongoStore()

  var sessionStore = new MongoStore({
        host: '127.0.0.1',
        port: '27017',
        db: 'session',
        url: 'mongodb://localhost:27017/demo'
    });

问题中的代码来自Basarat Ali Syed的《 Beginning Node.js 》一书。

于 2016-09-06T05:06:29.870 回答
8

由于您使用的是会话集合,所以它应该是这样的

    app.use(expressSession({
      store: new mongoStore({
          mongooseConnection: mongoose.connection,
          collection: 'session',
      })
   }));
于 2016-04-14T16:34:03.890 回答
1

检查http://sailsjs.com/documentation/reference/configuration/sails-config-session中的使用其他连接兼容会话存储部分。

connect-mongo模块存在版本限制,示例显示的参数集与文档中的参数集不同:

  // Note: user, pass and port are optional
  adapter: 'connect-mongo',
  url: 'mongodb://user:pass@host:port/database',
  collection: 'sessions',
  auto_reconnect: false,
  ssl: false,
  stringify: true

我实际上只需要使用:

  // Note: user, pass and port are optional
  adapter: 'connect-mongo',
  url: 'mongodb://localhost:27017/sails',
  collection: 'sessions'

希望能帮助到你!

于 2017-04-06T19:23:43.940 回答
1

您需要定义一个数据库连接,然后将其传递给新的 MongoStore。您正在使用的 'db:' 参数需要 MongoDB 驱动程序连接,而不是 Mongo 数据库的 url。为此,您应该执行以下操作:

var sessionStore = new MongoStore({ url:'mongodb://localhost:27017/test');

这是一个我知道可行的示例,尽管它使用 Mongoose 而不是 MongoDB 驱动程序。

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test');
var sessionStore = new MongoStore({mongooseConnection: mongoose.connection });
于 2016-02-08T20:14:32.040 回答