【发布时间】:2013-04-01 02:09:15
【问题描述】:
我正在使用连接域模块 (https://github.com/baryshev/connect-domain) 在我的 Express 应用程序中集中处理错误。
在大多数情况下它是有效的。但是,由于我不明白的原因,当我在 fs.exists 检查中抛出错误时,它不会捕获错误而是使节点崩溃。
app.get( "/anurl/", function( req, res ){
...
fs.exists( filename, function( exists ) {
if ( !exists ) throw new Error( "bah!" );
...
});
});
已编辑:
经过相当多的测试,我了解到上述不是问题的真正原因。
实际问题与使用 Redis 作为会话存储有关:
app.use( connectDomain() );
app.use( express.session({
secret: "secretz",
store: new RedisStore({ client: redis })
}));
使用上述方法,connectDomain 不再适用于任何异步抛出的错误。 (这包括对文件系统、超时、数据库连接等的调用)
如果我将以上内容更改为以下内容...
app.use( connectDomain() );
app.use( express.session({ secret: "secretz" }));
...然后一切正常。
所以关于 RedisStore 的某些东西正在破坏 Connect-Domain。不幸的是,我需要使用 Redis 来保持我的会话。
任何关于如何解决此问题的进一步建议将不胜感激。
【问题讨论】:
标签: javascript node.js express