【发布时间】:2014-04-09 08:08:46
【问题描述】:
我刚刚开始使用 Sails.js,它是一个了不起的框架。但是我遇到了一些情况,我无法通过谷歌找到解决方案,所以我来这里寻求帮助。
我有一个控制器来连接另一个远程服务,该服务使用非常陈旧的 API,充满了 XML 响应和不一致,并将该服务包装在简单而干净的 API 中。所以我有一些路由器,比如:
list: function(req, res) {
params = {
...
}
FooService.request(data, function(error, response) {
res.send(response)
})
process.once('uncaughtException', function(err) {
res.send(500, '[Foo] ' + err);
});
},
“process.once”用于可能在 FooService.request 进程中引发的异步异常。我知道这是不好的代码,我的问题是:如何以 Sails.js 的方式处理这种情况?
在 Node.js 中,我们有 Domain 和 connect-domain,它们专为此类问题而设计。因为 Sails.js 基本上是 Express,可以很好地促进 connect-domain,我认为可能有一些惯用的方式来做到这一点。
我已经尝试在 config/local.js 中添加这个:
module.exports = {
...
express: {
customMiddleware: function(app) {
console.log('Custom middleware config called')
var domain = require('connect-domain')
app.use(domain())
.use(function(err, req, res, next) {
console.log('Error catched!')
res.send(500, '[Foo] ' + err)
})
}
}
};
当发生未捕获的异常时,它不会使服务器崩溃,也不会向客户端返回错误 500('app.use(domain())' 有效)。但是没有调用自定义错误处理程序。不知道为什么。
【问题讨论】:
-
Sails 有一个包含 express.js 文件 init 的配置文件夹,尝试将您的连接域代码放在那里。
-
是的,我已经将它们放入 express.js,但是自定义处理程序 .use(function(err, req, res, next) {}) 仍然没有被调用...
标签: sails.js