在询问this question之后,我发现我可以将回调数组添加到sails应用程序中的端点,如下所示:
档案:/api/policies/somepolicy.js
module.exports = thisIsAnArrayOfCallbacks;
这可行,thisIsAnArrayOfCallbacks
的每个成员都是function
,接受req
,res
和next
作为参数。控制器调用执行数组中的所有函数,并在正常流程中获得预期结果。
但是当使用errorHandler
回调(例如this example中的回调)时,它会使用额外的err
参数,但它不会按预期工作:仅限快速版本{{ 1}}允许app.get('/path', thisIsAnArrayOfCallbacks)
获取异常并向客户端报告正确的响应,但是在使用sails方式时,不调用errorHandler
函数,并在响应中抛出异常。
我如何获取errorHandler
参数或捕获err
的某个函数中发生的异常,以便向客户端发送正确的响应(首选自定义响应)?
提前致谢。
答案 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,并记得在路由器之后添加自定义错误处理程序,然后在之前(或代替)处理程序添加。