タッチ・アンド・スリープ・アンド・ゴー

つまらないことしか書きません

node + express周りの基本 - 備忘録

大学院のプロジェクト(研究室みたいなやつ)の一環で習作を作っています。その中で、サーバサイドをnode + expressで作りこんでいます。
今まで、nodeのCLIを少しとexpress未経験だった僕としてのちょっとした備忘録。

導入

開発環境がmacなのでmac向けに書きます。今のmacにはデフォルトでnodeとnpmが入っているので、面倒くさいバージョン管理は抜きにしてプリインストールのシステムを使います。

$ mkdir project && cd project  
$ npm init  

質問に答えていく

$ npm install express  

作ったディレクトリにexpress(node環境のwebアプリケーションフレームワーク)をインストール 。
npmではnodeをベースにしたプロジェクト単位でパッケージを入れられる。

$ npm install ejs  

expressで使えるテンプレートエンジン。PHPみたいに使える。
ejsとjadeの2種類がある。
ejs => 今までの静的ページの資源を再利用し、PHPのように実行部分を付け加えられる。
jade => Rubymiddlemanとかあんな感じのノリでHTMLへ変換するための記述していくやつ。

$ mkdir views && cd views  
$ cat > index.ejs  

テンプレートファイルやHTMLファイルは $WEB_ROOT/views の直下に置いていく。

$ cd ../  
$ vim srv.js  

サーバサイドのプログラムを記述。
後述。

$ node srv.js  

サーバアプリを起動。

コーディング

var express = require("express");
var app = express();

// テンプレートエンジンにejsを使う指定
app.set("view engine","ejs");

// まずはwebサーバを8080ポートで開く。
var server = app.listen(8080,function(){
    console.log("express is running at "+server.address().port);
});

// $WEB_ROOTにGETリクエストが送られて来た時の処理
// req => 来たリクエストのデータが格納されている。
// res => レスポンスを送るためのインスタンス。renderメソッドとかsendメソッドでクライアントにレスポンスできる。
// next => よく存じ上げていない。今のところ使っていない。
app.get("/",function(req,res,next){
    res.render("index",{});
});

// $WEB_ROOT/api とかにPOSTリクエストが来た時の処理。
app.post('/api',function(req,res){
    //renderの場合はview以下の第一引数で指定したテンプレートファイル/HTMLファイルがクライアント側に返されて表示される。
    //第一引数の文字列からは拡張子は省略できる
    res.render("api",{});
    //sendはデータをレスポンスで返せる。
    //ObjectとかArrayで返すと便利。
    res.send([
        {taskName: "帰る", taskPriority: 1},
        {taskName: "寝る", taskPriority: 2},
        {taskName: "学校に来る", taskPriority: 3}
    ]);
});