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

时间:2015-07-26 14:02:08

标签: node.js error-handling sails.js

我想知道什么是最好的做法,如果我应该创造:

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

1 个答案:

答案 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}}。我可能正在读错了,但我想有理由得出结论,目前无法在那里添加目录,所以我想你必须坚持上述解决方案之一。