我正在使用hapi.js创建我的第一个node.js REST Web服务。我很好奇处理错误的最佳方法,让我们从我的dao层说出来。我是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);
});
}
}();
刀/ 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
}
}
}();
答案 0 :(得分:6)
与 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);
}
}();
答案 1 :(得分:5)
我们编写了一个Hapi插件,可以无缝地处理所有错误:npmjs.com/package/hapi-error
它允许您通过3个简单步骤定义自己的自定义错误页面。
npm install hapi-error --save
在register
您的服务器时包含该插件:
server.register([require('hapi-error'), require('vision')], function (err) {
// your server code here ...
});
有关简单示例,请参阅:/example/server_example.js
error_template
注意:
hapi-error
插件期望您正在使用Vision
( Hapi应用的标准视图呈现库) 这允许您使用 Handlebars ,Jade, React ,等。为您的模板。
您的error_template.html
(或error_template.ext
error_template.jsx
)应该使用它将传递的3个变量:
errorTitle
- Hapi生成的错误图块 statusCode
- *发送到客户端的HTTP statusCode,例如:404
( not found )errorMessage
- 人性化错误消息 有关示例,请参阅:
/example/error_template.html
就是这样!现在您的Hapi App处理所有类型的错误,您也可以自己定制错误!
注意:
hapi-error
也适用于REST / API。如果内容类型标题(headers.acceps
)设置为application/json
,那么您的应用将向客户端返回JSON错误,否则将提供HTML页面。
答案 2 :(得分:2)
我认为很酷的孩子现在使用一个软件包来抓住Hapi的未处理错误,我向你呈现Poop。
Poop唯一缺少的是一些丰富的文档,但检查出来,你会发现Poop很棒。
我的一些朋友参加了里斯本的node.js活动,主持人是Wallmart负责网络技术堆栈的人,他们使用Hapi.js,Poop和其他一些很酷的东西。
所以,如果他们使用便便,那一定非常棒。
PS:这个名字非常棒