Node.jsを触ってみた話4
Node.jsを触ってみた話4
Node.jsを触ってみた話3の続き。
前回やったこと
・ルーティングとミドルウェアについて
・ルーターモジュールを使ったルーティングの方法と使わない方法の比較
今回は前回やったことにプラスして、ミドルウェアの処理を複数実行する方法を書くよ!
前回のおさらいとして2つのソースを以下に挙げときます。
ルーターモジュール使わない方法
var express = require('express'); var app = express(); app.get('/', (req, res) => { res.send('Hello world!!!'); });
ルーターモジュールを使う方法
まずはモジュール化
//hoge.js var express = require('express'); var router = express.Router(); router.get('/', (req, res) => { res.send("Hello world!!!"); }) module.exports = router; //ルーティングを設定したrouterオブジェクトを返す
アプリケーションにマウント
//app.js var express = require('express'); var app = exporess(); var hogeRouter = require('./hoge'); app.use('/', hogeRouter);
ミドルウェアに処理を渡す方法
ミドルウェアに複数の処理を実行させるにはnext();を使う!
next()関数は次のミドルウェア関数に対するアクセス権限を持つ関数!
nextの名前は変更できるが慣習的に使われているので変えない!
以下ソース例
モジュール利用時のミドルウェア関数に第三引数としてnext()を与えます。
そして処理を一つ増やして、next()で処理を渡してあげます。
//hoge.js var express = require('express'); var router = express.Router(); router.get('/', (req, res, next) => { res.send("Hello world!!!"); next(); }, function(req, res) { console.log("test message!"); }); module.exports = router;
これでページに"Hello world"が出力されてからコンソール画面に"test message"が出力されます! ただ疑問点があって、イベントループ的にこれは"Hello world"が先なのか"test message"が先なのか ちょっと混乱してきた。。。
実際next()はミドルウェア関数のコールバックとして渡されるはずだけど、ノンブロッキングってことになるからもしかしてページに"Hello world"が表示されるよりも先に"test message"が出るのかな。。。?
わかる人いたら教えてください!!!!!!
次回はgetとpostの処理を書いていきたいと思います。
Node初心者が書いているため間違いや指摘などあれば大歓迎です!よろしくお願いします!!!