我想知道什么是最佳实践以及我是否应该创建:
- 一个目录,其中静态声明我的应用程序使用的所有错误,例如 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 files到 res
而不检查它们是否是目录。因此,在 responses
下添加目录会导致 lodash
出现 TypeError
。我可能读错了,但我想可以合理地得出结论,目前不可能在那里添加目录,所以我想您必须坚持使用上述解决方案之一。
关于node.js - 我应该将自定义错误放在 sails.js 中的哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31637829/