如何在Sails.js策略中使用错误处理程序回调?

时间:2014-03-04 20:28:59

标签: node.js express sails.js

在询问this question之后,我发现我可以将回调数组添加到sails应用程序中的端点,如下所示:

档案:/api/policies/somepolicy.js

module.exports = thisIsAnArrayOfCallbacks;

这可行,thisIsAnArrayOfCallbacks的每个成员都是function,接受reqresnext作为参数。控制器调用执行数组中的所有函数,并在正常流程中获得预期结果。

但是当使用errorHandler回调(例如this example中的回调)时,它会使用额外的err参数,但它不会按预期工作:仅限快速版本{{ 1}}允许app.get('/path', thisIsAnArrayOfCallbacks)获取异常并向客户端报告正确的响应,但是在使用sails方式时,不调用errorHandler函数,并在响应中抛出异常。

我如何获取errorHandler参数或捕获err的某个函数中发生的异常,以便向客户端发送正确的响应(首选自定义响应)?

提前致谢。

1 个答案:

答案 0 :(得分:4)

你是正确的,因为政策不能被定义为错误回调;它们只是路由处理中间件,实际上绑定到它们所应用的每条路由。理想情况下,您可以使用try/catch在政策函数中捕获任何错误,并使用res.forbidden()res.badRequest()res.serverError()等内容发送回复。在Sails v0中。 10您可以进行所需的任何自定义响应,并将其存储在api/responses文件夹中。

如果你真的想在Sails中实现一个catch-all错误处理程序,你有两个选择:覆盖默认的500处理程序(在Sails v0.10中,这是/api/responses/serverError,在v0.9.x中它是config/500.js)或(在v0.10中)创建自定义Express中间件并使用sails.config.express.loadMiddleware加载它。有关第二个选项的详细信息,请参阅this SO question,并记得在路由器之后添加自定义错误处理程序,然后在之前(或代替)处理程序添加