Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session NodeJS+;Express+;Mongo会话存储_Session_Node.js_Mongodb_Express_Everyauth - Fatal编程技术网

Session NodeJS+;Express+;Mongo会话存储

Session NodeJS+;Express+;Mongo会话存储,session,node.js,mongodb,express,everyauth,Session,Node.js,Mongodb,Express,Everyauth,我目前正努力在MongoDb中存储会话 我尝试过express session mongo和connect mongodb,当我尝试加载登录页面时,它们都会给我相同的“500内部服务器错误”。这让我想到也许在某个地方与猫鼬有冲突 无论如何,这是我的设置: app.js: userModel.js 此时此刻,我真的只是尝试使用MongoDb作为会话存储,但当我尝试加载登录页面时,我再次在node.js控制台中收到一个500错误,没有任何信息 任何帮助都将不胜感激 谢谢这最终是各种模块的问题:con

我目前正努力在MongoDb中存储会话

我尝试过express session mongo和connect mongodb,当我尝试加载登录页面时,它们都会给我相同的“500内部服务器错误”。这让我想到也许在某个地方与猫鼬有冲突

无论如何,这是我的设置:

app.js:

userModel.js

此时此刻,我真的只是尝试使用MongoDb作为会话存储,但当我尝试加载登录页面时,我再次在node.js控制台中收到一个500错误,没有任何信息

任何帮助都将不胜感激


谢谢

这最终是各种模块的问题:connect session mongo/express session mongo/connect mongo,使用connect 2.0.1,express使用connect 1.8.5

显然,这里的依赖冲突阻止了会话存储模块访问'req.secret'属性

为了让它正常工作,我使用了模块connect mongodb,它仍然使用connect 1.8.5,就像Express一样

我以前无法让connect mongodb正常工作的原因是用户错误,我试图使用在线示例的复制/粘贴来代替我的头

以下是使用connect mongodb为我提供的配置代码:

var Session = require('connect-mongodb');

app.configure('production', function(){
  var oneWeek = 657450000;
  app.use(express.static(__dirname + '/../public', { maxAge: oneWeek }));

  var session = express.session({
        store: new Session({
              url: 'mongodb://localhost:27017/test', 
              maxAge: 300000
        }),
        secret: 'superTopSecret' 
  });
  app.use(session);

  app.use(mongooseAuth.middleware());
  app.use(require('./mySite').middleware());
  app.use(express.methodOverride());
  app.use(express.errorHandler());  
});

希望这能帮助其他遇到这个问题的人。如果您对此解决方案有任何建议/改进,我很高兴听到。:)

事实上,我刚刚尝试使用express session mongo,虽然我仍然得到相同的行为(尝试加载登录页面失败,出现500错误),但我刚刚签入MongoDb,会话实际上如预期的那样存在。仅供参考,我也尝试连接mongo,相同的结果。。。mongoose auth玩得不好?在深入研究everyauth模块的代码后,我所能发现的是,everyauth/lib/modules/password.js>>第47行中出现了500个错误:res.render(视图,本地);不幸的是,从我的立场来看,这并没有太大帮助…:(感谢您的帮助。我还可以使用Mongoose的现有连接,而不是指定URL。当您有多个具有单独DB实例的环境时,这一点尤其好。只需将
URL
参数替换为:
DB:Mongoose.connection.DB
,我只想说,您很棒。这可能会回答这个问题这个问题,如果可能的话,你应该在你的答案中包含一个简短的解释,说明这个代码块是如何回答这个问题的。这有助于提供上下文,并使你的答案对未来的读者更有用。
var Schema = mongoose.Schema;
var mongooseTypes = require("mongoose-types");
var mongooseAuth = require('mongoose-auth');
mongooseTypes.loadTypes(mongoose);

var everyauth = require('everyauth')
everyauth.debug = true;

var UserSchema = new Schema({any: {}});

UserSchema.plugin(mongooseAuth, {
    everymodule: {
      everyauth: {
          User: function () {
            return User;
          }
      }
    }
    , password: {
      loginWith: 'email'
      , extraParams: {
            phone: String
          , username: String
        }
      , everyauth: {
            getLoginPath: '/login'
          , postLoginPath: '/login'
          , loginView: 'account/login.jade'
          , getRegisterPath: '/register'
          , postRegisterPath: '/register'
          , registerView: 'account/register.jade'
          , loginSuccessRedirect: '/login/success'
          , registerSuccessRedirect: '/register/success'
        }
    }
});

mongoose.model('User', UserSchema);
User = mongoose.model('User');
var Session = require('connect-mongodb');

app.configure('production', function(){
  var oneWeek = 657450000;
  app.use(express.static(__dirname + '/../public', { maxAge: oneWeek }));

  var session = express.session({
        store: new Session({
              url: 'mongodb://localhost:27017/test', 
              maxAge: 300000
        }),
        secret: 'superTopSecret' 
  });
  app.use(session);

  app.use(mongooseAuth.middleware());
  app.use(require('./mySite').middleware());
  app.use(express.methodOverride());
  app.use(express.errorHandler());  
});
const express = require('express')
const app = express()
const cookieParser = require('cookie-parser');
const session = require('express-session')
const mongoose = require('mongoose');
const MongoStore = require('connect-mongo')(session);

mongoose.connect('mongodb://localhost/my-database', {
    useMongoClient: true
});
mongoose.Promise = global.Promise;
const db = mongoose.connection

app.use(cookieParser());
app.use(session({
    secret: 'my-secret',
    resave: false,
    saveUninitialized: true,
    store: new MongoStore({ mongooseConnection: db })
}));