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

我正在使用hapi.js创build我的第一个node.js REST Web服务。 我很好奇最好的方式来处理错误让我们从我的dao层说。 我throw它们throw我的dao层,然后只是try/catch块来处理它们,并在我的控制器中发回错误,还是有更好的方式,凉爽的孩子们正在处理这个?

路线/ 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 / task.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 } } }(); 

在与里卡多·巴罗斯Ricardo Barros )关于使用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); } }(); 

通用解决schemew / 完全可定制的错误模板/消息

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

构建状态 codecov.io 守则气候 依赖状态

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

1.从npm安装插件 :

 npm install hapi-error --save 

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

register服务器时join插件:

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

有关简单示例,请参见/example/server_example.js

3.确保您有一个名为error_template的视图

注意: hapi-error插件期望您使用VisionHapi应用程序的标准视图渲染库 ),允许您使用Handlebars ,Jade, React 。 为您的模板。

你的error_template.htmlerror_template.ext error_template.jsx )应该使用它将被传递的3个variables:

  • errorTitle由Hapi生成的错误图块
  • statusCode – *发送到客户端的HTTP statusCode, 例如: 404未find
  • errorMessage人性化的错误信息

例如,请参阅: /example/error_template.html

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

高致病性禽流感发生误差屏

注意: hapi-error适用于REST / API。 如果内容types头文件( headers.acceps )设置为application/json那么你的应用程序将返回一个JSON错误给客户端,否则HTML页面将被提供。

我觉得现在很酷的孩子们使用一个软件包来抓取Hapi未经处理的错误,我向你介绍了Poop 。

Poop缺less的仅仅是一些丰富的文档,但是检查一下,你会发现Poop很棒。

我的一些朋友去了里斯本的一个node.js活动,主持人是Wallmart的负责Web技术的人,他们使用Hapi.js,Poop和其他一些很酷的东西。

所以,如果他们使用便便,它一定是非常棒的。

PS:名字是suppa真棒