gpt4 book ai didi

sails.js - Sails.js 中的错误处理

转载 作者:行者123 更新时间:2023-12-04 20:43:25 31 4
gpt4 key购买 nike

我刚刚开始使用 Sails.js,它是一个了不起的框架。但是我遇到了一些情况,我找不到谷歌的解决方案,所以我来这里寻求帮助。

我有一个 Controller 连接到另一个远程服务,该服务使用非常旧的 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 中,我们有 Domainconnect-domain ,专为此类问题而设计。因为 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或您的 Controller 中的其他一些响应:

FooService.request(data, function(error, response) {
if (error) {return res.serverError(errror);}
res.send(response)
});

如果 FooService 正在使用您无法控制的包,这些包本身可能会在异步代码中抛出它们没有捕获的错误(错误代码!),那么另一个不错的选择是使用 Node 的 error domains .见 this answer举个例子,有人做一个快速包装器来使用域来捕获异步代码中的错误。

关于sails.js - Sails.js 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22228729/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com