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

标签 node.js express sails.js

询问后this question ,我发现我可以像这样将回调数组添加到 sails 应用程序中的端点:

文件:/api/policies/somepolicy.js

module.exports = thisIsAnArrayOfCallbacks;

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

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

我如何获取 err 参数或捕获 thisIsAnArrayOfCallbacks 函数之一中发生的异常以向客户?

提前致谢。

最佳答案

您说得对,政策不能定义为错误回调;它们只是路由处理中间件,实际上绑定(bind)到它们所应用的每个单独路由。理想情况下,您会使用 try/catch 捕获策略函数本身中的任何错误,并使用类似 res.forbidden()res.badRequest 的方式发送响应()res.serverError() 等。在 Sails v0.10 中,您可以制作任何您想要的自定义响应并将其存储在 api/responses 中文件夹。

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

关于node.js - 如何在 Sails.js 策略中使用错误处理程序回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22182326/

相关文章:

c++ - 使用 #ifndef 会破坏 node-gyp 模块

javascript - 无效的速记属性初始值设定项

javascript - 从客户端浏览器将 Canvas 保存到磁盘上?

javascript - 如何在 angularJS 中获取 Expess 对象 cookie?

javascript - 无法在外部 javascript 中访问本地变量

mysql - 使用 local.js 存储 sails-mysql 密码

javascript - bluebird promisify 函数未转换为 Promise

node.js - Express.js hbs 模块 - 从 .hbs 文件注册部分内容

javascript - 在 yeoman 为 Angular Fullstack 生成的代码结构中提供静态内容

javascript - 如何将 View 连接到 Sails.js 中的默认 api url