Sails.js中的错误处理
我刚刚开始使用Sails.js,它是一个非常棒的框架。但我遇到了一些情况,我无法通过谷歌找到解决方案,所以我来这里寻求帮助 我有一个控制器,可以连接到另一个远程服务,这个远程服务使用非常旧的设计API,API中充满了XML响应和不一致性,将该服务包装在简单干净的API中。所以我有一些路由器,比如:Sails.js中的错误处理,sails.js,Sails.js,我刚刚开始使用Sails.js,它是一个非常棒的框架。但我遇到了一些情况,我无法通过谷歌找到解决方案,所以我来这里寻求帮助 我有一个控制器,可以连接到另一个远程服务,这个远程服务使用非常旧的设计API,API中充满了XML响应和不一致性,将该服务包装在简单干净的API中。所以我有一些路由器,比如: list: function(req, res) { params = { ... } FooService.request(data, function(e
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中,我们有和,它们是为此类问题而设计的。因为Sails.js基本上是Express,它可以很好地促进连接域,所以我认为可能有一些惯用的方法可以做到这一点
我已尝试在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())”起作用)。但未调用自定义错误处理程序。不知道为什么。如果您控制着FooService代码,那么最好的选择是通过调用
FooService.request的回调来处理那里发生的所有错误。在出现错误时尽早请求
,然后在控制器中使用res.serverError
或其他一些响应:
FooService.request(data, function(error, response) {
if (error) {return res.serverError(errror);}
res.send(response)
});
如果FooService使用的是您无法控制的包,而这些包本身可能会在异步代码中抛出错误,而它们无法捕获这些错误(错误代码!),那么另一个好的选择是使用节点的。有关某人使用域快速包装来捕获异步代码中错误的示例,请参阅。Sails有一个带有express.js文件init的配置文件夹,请尝试将您的连接域代码放在那里。是的,我已将它们放在express.js中,但自定义处理程序。从v0.10.0开始,仍然未调用use(function(err,req,res,next){})(我想是吧?),你可以使用
res.negotiate(error)
而不是每次抛出500。