我有一个相当标准的 connect-mongo 设置
猫鼬在此之前初始化/连接
app.use(express.session({
secret: "sfdgsdgsdfg",
store: new MongoSessionStore({db: mongoose.connection.db})
}));
这工作正常。
但是 - 假设我的 mongodb 连接突然中断(在下面的示例中本地停止 mongod) - 下次我尝试到达路线时,我的快速应用程序也会崩溃 -
错误:无法在 null 处连接到 [localhost:27017]。(/Users/alex/Projects/MyProject/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:540:74) 在空时发出 (events.js:106:17)。(/Users/alex/Projects/MyProject/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:140:15) 在 Socket 的发射 (events.js:98:17)。(/Users/alex/Projects/MyProject/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:478:10) 在 Socket.emit (events.js:95:17) 在 net.js: 440:14 在 process._tickCallback (node.js:419:13)
有没有办法处理这个错误并(例如)重定向到 /error 路由?(显然是不需要会话的!)
编辑
所以现在,我正在创建一个单独的猫鼬连接。
然后我使用on('error'
来监听错误
...这就是我被卡住的地方-该过程仍然死亡,因为重新抛出错误不会将其传递给快速错误处理程序...
var sessionDbConnection = mongoose.createConnection(config.sessionDb);
sessionDbConnection.on('error', function(err) {
console.log('oops');
throw err; //instead of re-throwing the error, i think i need to pass it to the error handler below??
})
app.use(express.session({
secret: "sfdgsdgsdfg",
store: new MongoSessionStore({db: sessionDbConnection.db})
}));
app.use(function(err, req, res, next) {
res.render('error', err); //just for testing
});