我想知道什么是最好的做法,如果我应该创造:
答案 0 :(得分:2)
解决此问题的一种巧妙方法是在api/responses
下简单地将错误添加为自定义回复。这样甚至调用变得非常整洁。虽然doc表示您应该直接在responses
目录中添加它们,但我确信必须有一种方法可以将它们嵌套在responses/errors
之下。我会尝试一下并稍微发布更新。
好吧,快速搜索,我无法找到任何方法来嵌套响应,但你可以使用一个不太整洁的小解决方法:
使用所有自定义错误响应处理程序创建responses/errors
目录。创建custom response并将其命名为custom.js
。然后在调用res.custom()
时指定响应名称。
我只是为了说明添加了一个简短的代码段:
API /响应/ 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();
}
来自控制器:
res.custom('authError', data);
如果您不需要对不同错误进行逻辑处理,则可以取消整个errors/
目录并直接调用custom.js
中的相应视图:
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
}
(您应首先检查视图是否存在。了解链接页面的方式。)
虽然我为某些目的使用类似的东西(划分路由等),但肯定应该有一种方法来包含在不同目录中定义的响应处理程序。 (也许通过重新配置一些笨拙的任务?)如果我找到任何成功,我会尝试找出并更新。
祝你好运!<强>更新强>
好的,所以我发现responses
挂钩将all files添加到res
,而不检查它们是否是目录。因此,在responses
下添加目录会导致来自TypeError
的{{1}}。我可能正在读错了,但我想有理由得出结论,目前无法在那里添加目录,所以我想你必须坚持上述解决方案之一。