自分で作ったり提供したりするものは、まず自分自身で使ってみろろということです。自分じゃ使わないものなら人はいくらでも無責任にも無思考にもなれる。そういう投げやりな「サービス」やら「プロダクツ」なんて、だれだってイヤだ。自分が作り手と同時に利用者の立場になれば、ちゃんと使えるレベルのものを提供しようとします。

2013年10月20日日曜日

express.jsのエラー処理

express.jsのエラー処理サンプルです。

app.js
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(require('stylus').middleware(__dirname + '/public'));
app.use(express.static(path.join(__dirname, 'public')));

//一般処理
app.use(function(request, response, next){
    console.log('ここだよ=[' + request.url + ']');
    response.send(404, "何もない");
});
//errorオブジェクトある処理
app.use(function(error, request, response, next) {
    //クライアントに送るHTTPコードです。基本はerrorオブジェクトにセットするべきですが、
    //セットされてない場合は、404をセットする
    response.status(error.status || 404);
    response.send("error.message=" + error.message);
});

app.get('/', routes.index);

//パラメーター処理例1
app.get('/user/:username', function(request, response, next){
    var username = request.params.username;
    if (username === 'koma') {
        next(); //404
    } else if (username === 'endia') {
        var err = new Error('該当するユーザーは存在していません。');
        //err.status = 500; //セットしたら、500を返す;セットしなければ、404を返す
        next(err);
    } else {
        response.send("ここは<strong>" + username + "</strong>さんのページです。");
    }
});

//パラメーター処理例2:チェック処理
app.param('postname', function(request, response, next, postname){
    if (postname === 'koma') {
        next(new Error(postname + "ポストは存在しません。")); //404
    } else {
        request.postname = postname;
        next();
    }
});
//パラメーターチェックOKだったら、ここへ
app.get('/post/:postname', function(request, response){
    response.send("this is <h1>" + request.postname + ".</h1>");
});

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

0 件のコメント:

コメントを投稿

ホームページ