无法使用护照在 MongoDB 中存储会话

Roy*_*rOn 5 mongodb node.js

我是 Node JS 的新手,我正在尝试使用 connect-mongo npm 包在 mongoDB 中存储会话,一旦我添加了以下行 - 我收到一个错误:

app.use(session({
  saveUninitialized: true,
  resave: true,
  store   : new MongoStore({ // adding this will cause an error
  db: 'users'
 })
}));
Run Code Online (Sandbox Code Playgroud)

错误

这是我的代码的会话部分(我使用的是 express 4.16):

    var express = require('express');
    var path = require('path');
    var favicon = require('serve-favicon');
    var logger = require('morgan');
    var cookieParser = require('cookie-parser');
    var bodyParser = require('body-parser');
    var session = require('express-session');
    var passport = require('passport');
    var LocalStrategy = require('passport-local').Strategy;
    var expressValidator = require('express-validator');
    var multer = require('multer');
    var upload = multer({dest: './uploads'});
    var flash = require('connect-flash');
    var bcrypt = require('bcryptjs');
    var mongo = require('mongodb');
    var mongoose = require('mongoose');
    var MongoStore  = require('connect-mongo')(session);
    var db = mongoose.connection;
    session(app, mongo.initSessionStore);

   app.use(session({
      saveUninitialized: true,
      resave: true,
      store   : new MongoStore({
        db: 'users'
      })
    }));

    // Passport
    app.use(passport.initialize());
    app.use(passport.session());
Run Code Online (Sandbox Code Playgroud)

Iva*_*vic 5

您尚未将 MonogDB 实例发送到MongoStore. 您发送了 string 'user',它期望数据库实例。所以它无法连接到 MonogDB。

如果您使用的是 Mongoose,您需要先连接到数据库,然后才能使用mongoose.connectionMongoStore:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;

app.use(session({
      saveUninitialized: true,
      resave: true,
      store   : new MongoStore({
        mongooseConnection: db
      })
}));
Run Code Online (Sandbox Code Playgroud)