如何在Sails.js策略中使用error handling程序callback?

问完这个问题之后 ,我发现我可以在sails应用中添加一个callback数组到一个端点,如下所示:

文件: /api/policies/somepolicy.js

 module.exports = thisIsAnArrayOfCallbacks; 

这个工作正常,而thisIsAnArrayOfCallbacks每个成员是一个接受reqresnext作为参数的函数。 控制器调用执行数组中的所有函数,并以正常stream程获得预期结果。

但是,当使用一个errorHandlercallback函数(如本例中的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处理程序。