BraintreeSDKを利用してPayPal ExpressCeckoutを実装する その8では、モジュールのインストールとミドルウェアの実装を紹介しました。今回の記事ではルーティングの確認とエラー処理についてご説明します。
ルーティングの確認
これまでの記事で、app.jsファイルにおいて、外部モジュールの読み込みの設定とテンプレートエンジンの設定の作業を行ってきました。これらはユーザーからサーバーにノンスを送信されたときに読み込む外部の「部品」です。
一方、これから紹介するルーティングは「部品」が全て読み込まれた後に、どの画面に遷移するかを案内する記述となります。
正常処理と例外処理の実装
一般的にWebアプリケーションフレームワークでルーティングをするときには、正常処理と例外処理に分けれられます。通常の処理とは、開発者が定義した文字列にアクセスしたリクエストについて返す処理のことを指します。
反対に例外処理とは開発者が定義していない処理をする作業のことです。具体的にはエラーとして処理ををします。
正常処理の実装
今回のデモサイトではroutesディレクトリの直下にある、indexファイルが呼び出されたときのみ正常処理の内容とします。つまりユーザーが、
localhost:3000 localhost:3000/index
のいずれかにアクセスしたときのみ、PayPal ExpressCheckoutに該当するページが表示されます。
オブジェクトの定義(app.js)
[php]
var index = require(‘./routes/index’);
[/php]
Braintreetestディレクトリの直下にある、./routes/indexをオブジェクトの変数として定義します。
変数の呼び出し(app.js)
[php]
app.use(‘/’, index);
[/php]
app.useメソッドを使って、どのパス(第一引数)にどのオブジェクト(第二引数)を割り当てるか定義します。
routerを他のファイルでも使えるようにする(index.js)
[php]
module.exports = router;
[/php]
変数(router)をexportsモジュールに代入すると、その変数はどこのファイルでも使えるようになります。
例外処理の実装
一方、例外処理ではユーザーがブラウザのURL欄に’/’や’/users’以外のパスを入力した時の処理を実装します。
localhost:3000/home localhost:3000/about
もしこのようなURLでアクセスされたときは、全て例外としてエラー処理を行います。
エラー処理の定義
[php]
app.use(function(req, res, next) {
var err = new Error(‘Not Found’);
err.status = 404;
next(err);
});
[/php]
一般的にWebアプリケーションフレームワークを構築して、定義されていないページにアクセスされると”404 not found”が表示されるように設定されます。今回のデモでも同じく’/’や’/users’以外のパスにアクセスされたときには、’Not Found’という文字列が表示されるerr(オブジェクト変数)を定義します。
加えてerrのプロパティを使ってstatusコードが404であることも定義しておきます。最後にnextメソッド用いることで、err(オブジェクト変数)が次のミドルウェア関数でも使えるようにします。
エラー処理の結果表示
[php]
app.use(function(err, req, res, next) {
res.locals.message = err.message;
res.locals.error = req.app.get(‘env’) === ‘development’ ? err : {};
res.status(err.status || 500);
res.render(‘error’);
});
[/php]
前のミドルウェア関数で定義されたerrを引き継いで、デモサイトのみで使えるローカル変数”message”に’Not Found’を代入します(3行目)。加えて開発環境であればerrオブジェクトを、本番環境であれば中括弧を表示することを三項演算子の構文を用いて、ローカル変数errorに代入します(4行目)。
最後にエラーのステータスコードを404か500であるかを示します(5、6行目)。ここら辺りの書き方はExpressのお作法的なような感じがします。詳しくは公式ドキュメントのページを参考にしてください。