とあるWeb屋の備忘録

とあるWeb屋の備忘録。たまに雑記。

Node.jsを触ってみた話2

Node.jsを触ってみた話2

前回は説明なしでとりあえずNode.jsでWebサーバーを作ってブラウザに表示させるやり方を書いたのでそれの細かい説明を書いていく。
素人が調べながら書いてるので違うところあったら指摘大歓迎です!!!

Expressとは

Node.js上で動作するWebアプリのフレームワーク(Webアプリを作るうえで必要な機能が最初から揃ってるよってこと)
例えばルーティング、ビューヘルパー、セッション管理の機能など。(ルーティング以外は全くピンとこない。。あとで調べます)
Node.jsでは一番メジャーなフレームワーク

以下にExpressを使った場合と使わない場合のルーティングについて書いたNode.jsのコードを例としてあげておきます。

まずはExpressを使わない場合

適当にJSファイルを作成して以下を記述する。

var http = require('http')
var server = http.createServer();
server.on('request',function(req, res) {
    res.writeHead(200,{'Content-Type': 'text/plain'});
    res.write('Hello world');
    res.end();
});
server.listen(3000, '127.0.0.1');
console.log("server listening ...");

書き終わったら指定したIPとポートにアクセスすればHello worldの表示確認できるよ!

次にExpressを使った場合

ルーターをモジュールとして作成してからメインアプリケーションのパスにマウントする。(Expressが自動で作ってるからもともと書いてあるよ)

//routesディレクトリに入っているindex.js(これはExpressを入れたら一緒に落ちてくるファイルのひとつ)
var express = require('express');
var router = express.Router();

/* /に対するルートを定義しているよ。  
sendメソッド使ってるけど実際はEJSとかをテンプレートで使うと思うからその場合はrenderメソッド使う。*/
router.get('/', function(req, res, next) {
    res.send('Hello world');

    //res.render('index', { title: 'Hello world'});

});

module.exports = router;

これでルーターをモジュール化完了! つぎにメインアプリケーションにマウントするよ! これはapp.jsに記述する。(Expressが自動で作ってるからもともと書いてある)

//app.js
var express = require('express');

var indexRouter = require('./routes/index');

var app = express();
app.use('/', indexRouter);

こんな感じ!モジュール化したルーターを変数indexRouterに入れて、
app.use関数でミドルウェア関数をロードする。 これでマウント完了なので/にアクセスするとHello worldが送信される。

ルーターをモジュール化してマウントする方法だとルートに固有のミドルウェア関数を呼び出すことができるようになるってことだけど、全然ピンと来てない。。これって複数のルーターのモジュールを作ってルーティングしたいパスにそれぞれを結びつけるってことだと思うんだけど、これをすることでほかにもこんな便利なことあるんだよ!ってものがあるのかな?正直わからん、だれか教えてほしい。。
ミドルウェア関数ってのは、ルーティングの過程(パスと内部ロジックを結びつける間)で挿入する処理のことだから、複数の処理(=複数のミドルウェア関数)をルーティングの過程に挟むことができるってことがわかった! ルーターレベルのミドルウェアが第三引数にnext持つのは次のミドルウェアに処理を渡すため。つまりマウントするルートに固有のミドルウェア関数を呼び出して処理を実行するし、複数の処理をしたければその分ミドルウェアを連結させていくって話ってことで理解した。連結方法はこんな感じ!分かりやすいように1秒後にconsole.log("done!")する。

router.get('/', function(req, res, next){
  res.send('Hello Express!!');
  next();
}, function(){
  setTimeout(function() {
    console.log("done!");
  },1000)
});

Expressの例を1つ挙げるだけで少し長くなったので続きはまた次回! 調べながら少しづつ理解していこうと思います。