FrontPage
概要 †
- 通常、JavaScriptはユーザーのブラウザで動作するプログラミング言語ですが、Node.jsはサーバー側で動作するJavaScript
- 最近のトレンドである「イベントループ」による非同期・シングルスレッド処理を実現している
バージョン管理 †
モジュール †
- http
- fs: ファイル読み込みなど
- util: util.print("hoge")などが可能.console.log("hoge")と変わらない?
- require("http")
- HTTPモジュールを作る(オブジェクト指向みたいのもの)
- コメントは//と/**/
- fs.readFileは非同期ファイル読み込み.全ての{}内部の処理が終わってから処理される(キューの処理を順に呼び出すためらしい.)
- http.createServer(function(req, res){})は,server=http.createServer();server.on("request", function(req, res){});と同義
- http.createServer(function(req, res){A;B;})は,server=http.createServer();server.on("request", function(req, res){A;});server.on("request", function(req, res){B;});と同義
- A.jsでexports.IP="localhost";と書かれていると,B.jsでA=request("A.js");A.IP;によってアクセスできる.
- 構造体は,var setting = {"IP": "192.168.255.255", "PORT": 80};によってsetting.IPにアクセスできる
- requireする前に,try{path=require.resolve("A.js"); var setting = require(path);} catch (e) {var setting = {"a": "hoge"}}とすると,jsファイルの存在確認ができる
- forEachは,Arrayの簡易的なfor.indexとarは省略可能.var a=[1,2,3,4,5];a.forEach(function(val,index,ar){});
- Object.keys(Array),オブジェクトのキー部分の配列を取得することができる.
- req.headersは,hostとかconnectionとかをキーとした配列
- urlはファイル構造ではなく,if (req.url === "/") {res.write("トップページです。");}else if (req.url === "/test") {res.write("実験用ページです。")}else {res.write("404");}のように分岐させる
- URLに引数などがある場合は,req.urlではなく,var parsedUrl = url.parse("http://" + setting.IP + ":" + setting.PORT + req.url);parsedUrl.pathnameを代わりに使う
- レスポンスのボディを送信.res.write("<html><body>テストデータです</body></html>");これがソースコードになる
- Node.jsは非常にバージョン依存性が高いので,nvmで切り替えられるようにしておく
- npmのインストール後は必ず"npm install"を行う!
- 依存関係のものを何故かインストールしてくれないので.
- 野良でNode.jsをインストールしないこと.かならずnvmを介して.
var arr = ["a", "b", "c", "d", "e"];
for (i = 0; i < arr.length; i++) {
document.write(arr[i] + '<br>');
}
- サーバ側が受けるイベントは,connection, disconnectionがある.
- クライアント側が受けるイベントは,任意である(serverがsocket.emit("myEvent", "hoge")とかemit("myEvent", {message: "", eventName: "myEvent"})などできるので)
- emit:クライアント全てに送信,broadcast:自分含めて送信,volatile:クライアントが受け取らなくても良い
- クライアント側のon("myEvent", function(data, func){})で,funcに書きこまれた関数がサーバ側で実行される!
- ejs
- <% %>を使うときには、このように「処理部分だけを<% %>内に書き、出力は<%= %>に書く」というように、処理と出力をきちんと切り分けて考える必要がある、ということを忘れないようにしましょう。
- setIntervalの変更はclearしてsetしなおす
- if(timer) clearInterval(timer);timer=setInterval(function(){document.getElementById?("test").innerHTML=c++;},t);}
- コールバックを設定する時,$(function() {};を忘れると当然全く動かないので注意