如何在Sails.js策略中使用error handling程序callback?
问完这个问题之后 ,我发现我可以在sails应用中添加一个callback数组到一个端点,如下所示:
文件: /api/policies/somepolicy.js
module.exports = thisIsAnArrayOfCallbacks;
这个工作正常,而thisIsAnArrayOfCallbacks
每个成员是一个接受req
, res
和next
作为参数的函数。 控制器调用执行数组中的所有函数,并以正常stream程获得预期结果。
但是,当使用一个errorHandler
callback函数(如本例中的callback函数)需要一个额外的err
参数时,它不能按预期工作:只有express的版本app.get('/path', thisIsAnArrayOfCallbacks)
允许errorHandler
获取该exception并向客户端报告适当的响应,但在使用sails方式时,不会调用errorHandler
函数,并且会在响应中引发exception。
我怎样才能获取err
参数或捕获thisIsAnArrayOfCallbacks
的函数之一发生的exception发送一个适当的响应(一个自定义的一个是首选的)到客户端?
提前致谢。
你是正确的,政策不能被定义为错误callback; 他们只是路由处理中间件,实际上是绑定到他们应用到的每个单独的路线。 理想情况下,你可以使用try/catch
在策略函数本身中捕获任何错误,并使用res.forbidden()
, res.badRequest()
, res.serverError()
等方法发送响应。在Sails v0.10中,可以进行任何你想要的自定义响应,并将其存储在api/responses
文件夹中。
如果你真的想在Sails中实现一个catch-allerror handling程序,你有两个select:覆盖默认的500处理程序(在Sails v0.10中,这是在/api/responses/serverError
,在v0.9.x中是config/500.js
)或(在v0.10中)创build自定义Express中间件,并使用sails.config.express.loadMiddleware
加载它。 看到这个问题的第二个选项的详细信息,并记住添加您的自定义error handling程序之后的路由器之前 (或代替)500处理程序。