我应该把自定义错误放在sails.js中?

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

  • 一个静态声明我的应用程序使用的所有错误的目录,如api / errors / custom1Error
  • 在文件中直接声明它们
  • 或者把文件直接放在需要那个错误的dir里面,比如api / controller / error / formInvalidError
  • 其他选项!

一个干净利落的方法是简单地将错误添加为api/responses下的自定义api/responses 。 这样,即使调用变得非常整齐。 虽然文档说你应该直接将它们添加到responses目录中,但是我确定必须有一种方法将它们嵌套在responses/errors之下。 我会尝试一下,并发布一个更新。

好吧,快速search,我找不到任何方法来嵌套的反应,但你可以使用一个小的解决方法,不完全一样:

使用所有自定义错误响应处理程序创buildresponses/errors目录。 创build一个自定义响应,并将其命名为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 } 

(您应该首先检查视图是否存在,找出链接页面上的内容。)

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

祝你好运!

更新

好吧,所以我发现responses钩子将所有文件添加到res而不检查它们是否是目录。 因此,在responses下添加目录会导致lodash中的TypeError 。 我可能会读这个错误,但我想这是合理的结论,目前不可能在那里添加一个目录,所以我想你将不得不坚持上述解决scheme之一。