【node.js】expressでエラー処理を実装する方法

はじめに

expressでの開発で必須のエラー処理を実装したので次回やるときのためにまとめておく

やりたいことは以下
・エラーが発生したらエラー内容をログ出力
・ユーザーにはエラーページを表示
・エラーでサーバーが落ちないように

実装

サーバー本体の実装はこんなかんじでいけました

app.js

// Node.js各種モジュール読み込み
var app = require("express")();
var http = require("http").Server(app);
var domain = require("domain");

// ★ここがポイント
// 500エラー(Node.js)
app.use(function(req, res, next) {
    var reqd = domain.create();
    reqd.on("error", function(err) {
        showServerError(res, err);
    });
    reqd.run(next);
});

// アプリごとの実装
app.use("/", require("./controllers/index.js")());
・・・

// 404エラー
app.use(function(req, res, next) {
    showNotFound(res);
});

// 500エラー(ミドルウェア)
app.use(function(err, req, res, next) {
    showServerError(res, err);
});

// HTTPサーバー開始
http.listen(config.server.port, function() {
    console.log("listening on *:" + config.server.port);
});

// NotFound処理
var showNotFound = function(res) {
    res.sender("404");
};

// サーバーエラー処理
var showServerError = function(res, err) {
    // ログ出力等
    res.sender("500");
};

以下をハンドリングできることが確認できたのでとりあえずokかな
・ランタイムエラー
・throw new Error

Node.js (Express) でuncaughtException が起きた時にエラーページを表示する - topspot's blog
こちらを参考にさせていただきました

以上です