【发布时间】:2015-01-24 04:46:22
【问题描述】:
我有一个相当标准的 connect-mongo 设置
mongoose 在此之前被初始化/连接
app.use(express.session({
secret: "sfdgsdgsdfg",
store: new MongoSessionStore({db: mongoose.connection.db})
}));
这很好用。
然而—— 假设我的 mongodb 连接突然断开(在下面的示例中本地停止 mongod) - 下次我尝试打路线时,我的快递应用程序也会崩溃 -
错误:无法连接到 [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) 在发射(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 路由? (显然不需要会话!)
编辑
所以现在,我正在创建一个单独的 mongoose 连接。
然后我使用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
});
【问题讨论】:
标签: node.js express connect connect-mongo