node.js - 我应该将自定义错误放在 sails.js 中的哪里?

标签 node.js error-handling sails.js

我想知道什么是最佳实践以及我是否应该创建:

  • 一个目录,其中静态声明我的应用程序使用的所有错误,例如 api/errors/custom1Error
  • 直接在文件中声明它们
  • 或者将文件直接放入需要该错误的目录中,例如 api/controller/error/formInvalidError
  • 其他选择!?

最佳答案

解决此问题的一个巧妙方法是简单地将错误添加为 api/responses 下的自定义响应。这样,即使调用也变得非常整洁。虽然doc说你应该直接将它们添加到 responses 目录中,我确信一定有一种方法可以将它们嵌套在 responses/errors 下。我会尝试一下并稍后发布更新。

好吧,经过快速搜索,我找不到任何嵌套响应的方法,但您可以使用一个不太简洁的小解决方法:

使用所有自定义错误响应处理程序创建 responses/errors 目录。创建 custom response并将其命名为 custom.js。然后在调用 res.custom() 时指定响应名称。

我添加一个简短的片段只是为了说明:

api/responses/custom.js:

var customErrors = {
    customError1: require('./errors/customError1'),
    customError2: require('./errors/customError2')
};
module.exports = function custom (errorName, data) {
    var req = this.req;
    var res = this.res;
    if (customErrors[errorName]) return customErrors[errorName](req, res, data);
    else return res.negotiate();
}

来自 Controller :
res.custom('authError', data);

如果您不需要对不同错误进行逻辑处理,您可以删除整个 errors/ 目录,直接从 custom.js 调用相应的 View :

module.exports = function custom (viewName, data) {
    var req = this.req;
    var res = this.res;
    return res.view('errors/' + viewName, data);//assuming you have error views in views/errors
}

(您应该首先检查 View 是否存在。在链接的页面上了解如何操作。)

虽然我出于某些目的(划分路由等)使用类似的东西,但绝对应该有一种方法来包含在不同目录中定义的响应处理程序。 (也许通过重新配置一些繁重的任务?)我会尝试找出并更新如果我发现任何成功。

祝你好运!

更新

好的,所以我发现 responses Hook 添加了 all filesres 而不检查它们是否是目录。因此,在 responses 下添加目录会导致 lodash 出现 TypeError。我可能读错了,但我想可以合理地得出结论,目前不可能在那里添加目录,所以我想您必须坚持使用上述解决方案之一。

关于node.js - 我应该将自定义错误放在 sails.js 中的哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31637829/

相关文章:

html - Node.js Web 应用程序中的 ECONNRESET、MongoNetworkError

java - 如何定义或生成一组错误代码?

mysql - 带有 sails-mysql 的水线 BIGINT 类型

json - Cors JSON 输入意外结束

javascript - NodeJS - 逐行读取函数 + While 循环

c# - web.config中的自定义错误页面,错误信息会丢失吗?

javascript - 在$ .ajax()调用之一中转义$ (“html”).ajaxError()

twitter-bootstrap - 将 Twitter Bootstrap 与 sails js v0.10 集成

sails.js - sails 10.x 水线 : What attribute type to use for Mongo objectID

javascript - 正确捕获异步函数node.js