Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我应该在sails.js中将自定义错误放在哪里?_Node.js_Error Handling_Sails.js - Fatal编程技术网

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

Node.js 我应该在sails.js中将自定义错误放在哪里?,node.js,error-handling,sails.js,Node.js,Error Handling,Sails.js,我想知道什么是最佳实践,我是否应该创建: 一个目录,其中静态声明我的应用程序使用的所有错误,如api/errors/custom1Error 直接在文件中声明它们 或者将文件直接放在需要该错误的目录中,如api/controller/error/formInvalidError 其他选择 一个简单的方法是在api/responses下添加错误作为自定义响应。这样,即使是调用也变得非常整洁。虽然上面说应该直接将它们添加到responses目录中,但我确信一定有办法将它们嵌套在responses/

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

  • 一个目录,其中静态声明我的应用程序使用的所有错误,如api/errors/custom1Error
  • 直接在文件中声明它们
  • 或者将文件直接放在需要该错误的目录中,如api/controller/error/formInvalidError
  • 其他选择
      一个简单的方法是在
      api/responses
      下添加错误作为自定义响应。这样,即使是调用也变得非常整洁。虽然上面说应该直接将它们添加到
      responses
      目录中,但我确信一定有办法将它们嵌套在
      responses/errors
      目录下。我将尝试一下,稍后发布更新

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

      使用所有自定义错误响应处理程序创建
      responses/errors
      目录。创建一个应用程序,并将其命名为
      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();
      }
      
      从控制器:
      res.custom('authError',数据)

      如果不需要对不同的错误进行逻辑处理,则可以删除整个
      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
      }
      
      (您应该首先检查该视图是否存在。在链接的页面上了解其存在方式。)

      尽管我出于某些目的(划分路由等)使用了类似的方法,但肯定应该有一种方法包含在不同目录中定义的响应处理程序。(也许通过重新配置一些grunt任务?)我会尝试找出答案,如果我发现任何成功的话,会更新

      祝你好运

      更新

      好的,我发现
      响应
      钩子添加到
      res
      ,而不检查它们是否是目录。因此,在
      responses
      下添加目录会导致
      TypeError
      来自
      lodash
      。我可能读错了,但我想可以得出这样的结论:目前不可能在那里添加目录,所以我想您必须坚持上面的解决方案之一