[英]NodeJS + Express + Mongo Session storage
我目前正在嘗試在 MongoDb 中存儲會話。
我嘗試過 express-session-mongo 和 connect-mongodb,當我嘗試加載登錄頁面時,它們都給我相同的“500 內部服務器錯誤”。 這讓我想到可能在某處與 mongoose-auth 存在沖突。
無論如何,這是我的設置:
應用程序.js:
var MongoStore = require('connect-mongodb');
var MongoDb = require('mongodb').Db;
var Server = require('mongodb').Server;
var db = new MongoDb('myDb', new Server('localhost', 27017, {auto_reconnect: true, native_parser: false}));
app.configure(function() {
app.use(express.logger({format: 'dev'}));
app.set('views', __dirname + '/../views');
app.set('view engine', 'jade');
app.set('view options', { layout: false });
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(mongooseAuth.middleware());
app.use(require('./mysite').middleware());
app.use(express.methodOverride());
});
app.configure('production', function(){
var oneWeek = 657450000;
app.use(express.static(__dirname + '/../public', { maxAge: oneWeek }));
app.use(express.session({ store: new MongoStore({db: db}), secret: 'super secret' }));
app.use(express.errorHandler());
});
// Routes
require('./routing.js');
mongooseAuth.helpExpress(app);
app.listen(3000);
console.log('Express server listening on port %d in %s mode', app.address().port, app.settings.env);
用戶模型.js
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');
此時此刻,我真的只是嘗試使用 MongoDb 作為會話存儲,但是當我嘗試加載登錄頁面時,我再次收到 500 錯誤,而 node.js 控制台中沒有任何信息。
任何幫助將不勝感激。
謝謝
它最終成為各種模塊的問題: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());
});
希望這可以幫助遇到此問題的任何其他人。 如果您對此解決方案有任何建議/改進,我很高興聽到。 :)
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 })
}));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.