【问题标题】:Error: Connection strategy not found MongoDB错误:未找到连接策略 MongoDB
【发布时间】:2016-04-21 17:09: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);

【问题讨论】:

    标签: mongodb express-session connect-mongo


    【解决方案1】:

    将 URL 添加到新的MongoStore()

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

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

    【讨论】:

    • 看起来db: 'session' 行没有影响。我评论了这一行,并按照@alturium 的说明添加了url 选项,它仍然有效。实际上它在demo 数据库中创建了一个名为sessions 的集合。
    【解决方案2】:

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

        app.use(expressSession({
          store: new mongoStore({
              mongooseConnection: mongoose.connection,
              collection: 'session',
          })
       }));
    

    【讨论】:

      【解决方案3】:

      您需要定义一个数据库连接,然后将其传递给新的 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 });
      

      【讨论】:

        【解决方案4】:

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

        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'
        

        希望对你有帮助!

        【讨论】:

          猜你喜欢
          • 2016-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-13
          • 2019-05-27
          • 1970-01-01
          • 2018-04-29
          • 1970-01-01
          相关资源
          最近更新 更多