代码之家  ›  专栏  ›  技术社区  ›  Catfish

hapi.js处理错误的最佳方法

  •  12
  • Catfish  · 技术社区  · 11 年前

    我正在使用hapi.js创建我的第一个node.js REST web服务。我很好奇处理错误的最佳方法,比如说从dao层。是吗 throw 他们在我的刀层,然后 try/catch 块来处理它们并在我的控制器中发回错误,或者有更好的方法让酷孩子们处理这些问题吗?

    routes/task.js

    var taskController = require('../controllers/task');
    //var taskValidate = require('../validate/task');
    
    module.exports = function() {
      return [
        {
          method: 'POST',
          path: '/tasks/{id}',
          config : {
            handler: taskController.createTask//,
            //validate : taskValidate.blah
          }
        }
      ]
    }();
    

    控制器/task.js

    var taskDao = require('../dao/task');
    
    module.exports = function() {
    
      return {
    
        /**
         * Creates a task
         *
         * @param req
         * @param reply
         */
        createTask: function createTask(req, reply) {
    
          taskDao.createTask(req.payload, function (err, data) {
    
            // TODO: Properly handle errors in hapi
            if (err) {
              console.log(err);
            }
    
            reply(data);
          });
    
        }
    }();
    

    dao/任务.js

    module.exports = function() {
    
      return {
        createTask: function createTask(payload, callback) {
    
        ... Something here which creates the err variable...
    
        if (err) {
          console.log(err); // How to properly handle this bad boy
        }
      }
    }();
    
    3 回复  |  直到 11 年前
        1
  •  9
  •   Community Mohan Dere    9 年前

    通用解决方案w/ 完全可定制 错误模板/消息

    我们编写了一个可以无缝处理所有错误的Hapi插件: npmjs.com/package/ hapi-error

    Build Status codecov.io Code Climate Dependency Status

    它允许您通过3个简单步骤定义自己的自定义错误页面。

    1.安装 plugin 来自npm:

    npm install hapi-error --save
    

    2.将插件包含在Hapi项目中

    当您 register 您的服务器:

    server.register([require('hapi-error'), require('vision')], function (err) {
     // your server code here ...
    });
    

    参见: /example/server_example.js 举个简单的例子

    3.确保您有一个名为 error_template

    注: hapi-error 插件 预期 您正在使用 Vision ( Hapi应用程序的标准视图渲染库 ) 它允许您使用 把手 反应 , .用于模板。

    你的 error_template.html ( error_template.ext error_template.jsx )应使用将传递的3个变量:

    • errorTitle - Hapi生成的错误平铺
    • statusCode -*发送到客户端的HTTP状态代码 例如: 404 ( 找不到 )
    • errorMessage - 人性化错误消息

    有关示例,请参见: /example/error_template.html

    就是这样 ! 现在,你的Hapi应用程序可以处理所有类型的错误,你也可以抛出自己的自定义错误!

    hapi-error-screens

    注: hapi错误 也适用于REST/API。如果内容类型标头( headers.acceps )设置为 application/json 那么你的应用程序将向客户端返回一个JSON错误,否则将提供一个HTML页面。

        2
  •  6
  •   F. Gouveia Catfish    11 年前

    随着 里卡多·巴罗斯 '使用评论 Boom ,这是我最后得到的。

    controllers/task.js

    var taskDao = require('../dao/task');
    
    module.exports = function() {
    
      return {
    
        /**
         * Creates a task
         *
         * @param req
         * @param reply
         */
        createTask: function createTask(req, reply) {
    
          taskDao.createTask(req.payload, function (err, data) {
    
            if (err) {
              return reply(Boom.badImplementation(err));
            }
    
            return reply(data);
          });
    
        }
    }();
    

    dao/task.js

    module.exports = function() {
    
      return {
        createTask: function createTask(payload, callback) {
    
        //.. Something here which creates the variables err and myData ...
    
        if (err) {
          return callback(err);
        }
    
        //... If successful ...
        callback(null, myData);
      }
    }();
    
        3
  •  3
  •   Ricardo Barros    11 年前

    我认为酷孩子们现在使用一个包来捕捉哈皮未处理的错误, Poop .

    Poop唯一缺少的是一些丰富的文档,但查看一下,你会发现Poop很棒。

    我的一些朋友参加了里斯本的node.js活动,其中一位主持人是Wallmart负责网络技术堆栈的人,他们使用Hapi.js、Poop和其他一些很酷的东西。

    所以,如果他们使用粪便,那一定非常棒。

    PS:名字叫suppa真棒