Node.js/Nodeでサーバーサイド入門

Last-modified: 2014-03-01 (土) 17:02:17

Node.jsに触れてから4ヶ月ぐらいたったので、いろいろまとめ。
正確さとか厳密な説明は求めないでください...

環境 : Node v0.10.18 , Express 3.4.5

目次

Node.jsとは

  • V8エンジンがベース : GoogleのJSエンジン。強い。
  • イベントループ : イベントを待機し、イベントが発生したらそれに応じた処理をする。 cf.スレッドモデル
  • ノンブロッキングI/O : InputやOutputは時間がかかる処理。その処理の完了を待たずに次の処理を行う。

準備

  • インストールとかは省略
    var print = require('util').log;
    var ins = require('util').inspect;
    util.logがconsole.log,util.inspectがJSON.Stringifyに当たる

モジュール

  • requireでいろいろ取り込める
  • 使い方は公式ドキュメントを見るのが一番

httpモジュールを使ってみる

  • HTTPリクエスト(サーバーサイドじゃないけど)
    var http = require('http');
    var print = require('util').log;
    var ins = require('util').inspect;
    
    var options = {
    	hostname: 'www.google.co.jp',
    	path: '/',
    	method: 'GET'
    };
    
    var req = http.request(options, function(res){
    	var body = "";
    	print('status: ' + res.statusCode);
    	print('headers: ' + ins(res.headers));
    	res.setEncoding('utf8');
    	res.on('data', function(chunk){
    		body += chunk;
    	});
    	res.on('end', function(){
    		print('body: ' + body);
    	});
    });
    
    req.on('error', function(e){
    	print('error: ' + e.message);
    });
    
    req.end();

簡易サーバー作る

  • 参考の1番参照
  • 本とか読むといいよ。

ExpressでWebページ作る

  • Express : Node.js用のWebアプリケーションフレームワーク
  • Nodeだけだと色々大変なので、簡単に書けるようにしてくれる
  • Rubyだと、Ruby on Railsみたいな
  1. 導入
    npm install -g express
  2. 作成
    express -e chat
    いずれchatにするかもしれないので、chatという名前で…
    オプションの-eはejsというHTMLテンプレートを使うよ、っていうやつ。何も指定しないとjadeっていうテンプレートになる。ejsの方がHTMLに近いしとっつきやすいかもしれない。
    cd chat
    npm install
    npm installでexpressが依存してるモジュールを取得する。
  3. 起動
    node app.js
    Webブラウザでlocalhost:3000を見ると…
  4. 簡単!!!!
    これにいろいろ手を加えていきます。

app.jsを見てみる

  • ./routes/index.js と ./routes/user.js をrequireしてる
  • app.getがGETリクエストを受け取ったときの処理っぽい
    • 第一引数がpath 第二引数がそのときの処理

./routes/index.jsを見てみる

  • app.js内のroutes.indexがexports.indexに当たる
  • {title:'Express'} ここの'Express'を他のものに変えて再起動してみると…
  • res.renderで何か返してるっぽい

./routes/user.jsを見てみる

  • res.sendでなにか返してるっぽい

./views/index.ejsを見てみる

  • HTMLっぽいけど、ちょっと違う。さっきのHTMLテンプレートというやつ。
  • ブラウザで見たページっぽい。
  • <%= title %>部分がExpressに置き換わって表示されてた。
  • res.renderはviews以下のテンプレートを第二引数を用いて置き換えてHTMLを作り、返してたっぽい

HTMLテンプレート ejs

  • <%= hoge %> : 変数hogeに置き換わる
  • <% foo %> : javascriptで書ける。ループ処理とか。
  • など
  • サーバー上にある「静的な」HTMLファイルを返すだけ、という処理では限界がある。
  • 「動的に」HTMLを作って返すのがサーバーのお仕事になる。

Node.js + Express + socket.io でチャットを作る

参考になるページ

  1. Nodeビギナーズブック 日本語訳
  2. ドットインストール
    • Node.js入門
    • express入門

備考

  • HTTP
    • Hypertext Transfer Protocol
    • 通信規約の1つ
    • WebサーバーとWebクライアント間でHTMLなどのWeb情報の配信に用いる
    • メソッド : どのように情報の送信・取得をするか
      • GET : 何か取得するやつ
      • POST : 何か送信するやつ
      • とりあえずはこの2つだけで十分だと思う
  • HTTPS
    • HTTP + SSL
    • セキュリティ面がつよくなったやつ