私は最初のnode.jsを作成していますREST hapi.jsを使用したWebサービス。たとえば、daoレイヤーからのエラーを処理するための最良の方法に興味があります。Doithrow
それらを私の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
}
}
]
}();
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) {
// 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);
}
}();
すべてのエラーをシームレスに処理する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
プラグインexpects使用しているVision
(Hapiアプリの標準ビューレンダリングライブラリ)which ハンドルバー、ジェイド、反応、etc。テンプレート用。
error_template.html
(またはerror_template.ext
error_template.jsx
)は、渡される3つの変数を使用する必要があります。
errorTitle
--Hapiによって生成されたエラータイルstatusCode
- *クライアントに送信されたHTTPstatusCode 例:404
(見つかりません)errorMessage
-人に優しいエラーメッセージ例については、以下を参照してください。
/example/error_template.html
それだけです!これで、Hapiアプリがすべてのタイプのエラーを処理し、独自のカスタムエラーをスローすることもできます。
注:
hapi-error
はREST/APIでも機能します。コンテンツタイプヘッダー(headers.acceps
)がapplication/json
に設定されている場合、アプリはクライアントにJSONエラーを返します。そうでない場合、HTMLページが提供されます。
かっこいい子供たちは今、Hapiで未処理のエラーをキャッチするためにパッケージを使用していると思います、私はあなたに提示します、 うんち 。
Poopに欠けているのは、豊富なドキュメントだけですが、チェックしてみると、Poopが優れていることがわかります。
私の友人の何人かはリスボンのnode.jsイベントに行きました。ホストの中には、WallmartのWebテクノロジースタックを担当する人がいました。彼らはHapi.js、Poop、その他のクールなものを使用しています。
だから彼らがうんちを使うならそれはかなり素晴らしいに違いない。
PS:名前はsuppa awesome