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
它允许您通过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
插件期望您使用Vision
( Hapi应用程序的标准视图渲染库 ),允许您使用Handlebars ,Jade, React 等 。 为您的模板。
你的error_template.html
( 或error_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真棒