node.jsの私的まとめ
HTTPサーバーの起動
server.js
// httpモジュールの読み込み var http = require('http'); // httpサーバーの起動 http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(80); console.log('Server running');
外部JSファイルの読み込み
hello.js
//exportsオブジェクトに入れることで外部ファイルに読み込まれる exports.world = function(){ return 'Hello World'; };
server.js
//外部JSの読み込み var hello = require('./hello'); // httpモジュールの読み込み var http = require('http'); // httpサーバーの起動 http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(hello.world()); }).listen(80); console.log('Server running');
EventEmitterとは?
EventEmitterはオブジェクトに関数(リスナー)をアタッチすることができるオブジェクト。
node.jsでイベントを生成する全てのオブジェクトはevents.EventEmitter のインスタンスになっている。
EventEmitterを使う - すにぺっと
とのことなので、ここを理解しなければいけない。
上記URLの理解をまとめてみた。
クラスのプロトタイプにEventEmitterオブジェクトが代入されている。
これにより、onやemitなどが利用出来るようになる。
ここで、「HTTPサーバーの起動」についてみてみる。
// httpサーバーの起動 var server = http.createServer(function(req, res){ });
の部分は、以下と同等である。
var server = http.createServer(); server.on('request', function(req, res){ });
このonがEventEmitterオブジェクト由来のメソッドとなっている。
node.jsのソースをみてみると(http.js)以下のようになっている。
exports.createServer = function(requestListener) { return new Server(requestListener); }; function Server(requestListener) { if (!(this instanceof Server)) return new Server(requestListener); net.Server.call(this, { allowHalfOpen: true }); if (requestListener) { this.addListener('request', requestListener); } }
emit部分は、
self.emit('request', req, res);