Nodejsコアモジュール
注意:グローバル変数の導入を避けるために、var定義変数を永遠に使用します.グローバル変数は名前空間を汚染し、コード結合のリスクを高めます.
1.1.process
argv.js
console.log(process.argv);
$node argv.js 1991 name=byvoid--v「Carbo Kuo」''node'は、
'/home/nik/nodejs/examples/argv.js'
'1991'
'name=byvoid'は、
'--v'
'Carbo Kuo'
//processstdin.js
process.stdin.resume();
process.stdin.on('data', function(data) {
process.stdout.write('read from console: ' + data.toString());
});
$node processstdin.js ハロー・コンサート・ソロ
read from consone:hello consolie
例:
function doSomething(args, callback) {
somethingComplicated(args);
callback();
}
doSomething(function onEnd() {
compute();
});
compute()とsomethingCoplicated()の2つの関数が比較的に時間がかかり、この2つのプログラムが相次いで実行されると、Nodejsはスレッドが一つしかないので、この2つのイベントは大量のCPU時間を使って、イベントサイクル中の次のイベントを実行するには長い間待たなければなりません.もし次のように変更したら:function doSomething(args, callback) {
somethingComplicated(args);
process.nextTick(callback);
}
doSomething()を実行した後、nodejsは次の時間循環応答時にコールバックすなわちcompute()を呼び出します.ps:setTimout(fn,0)の効率はprocess.nextTick(calback)よりずっと低いです.
process.plotform、process.pid、process.execPath、process.memoryUsage()etc.
1.2.co nsole
$node
>consone.trace()
Trace
at repl:1:10
at REPL Server.self.eval(repl.js:110:21)
at Interface.
at Interface.emit(events.js:95:17)
at Interface._オンライン(readline.js:202:10)
at Interface._ライン(readline.js:531:8)
at Interface._キティWrite(readline.js:760:14)
at ReadStream.onkeyress(readline.js:99:10)
at ReadStream.emit(events.js:98:17)
at emiitKey(readline.js:1095:12)
undefined
2.util
utilはnode.jsのコアモジュールで、コアJavaScriptの機能を補うために、常用関数のセットを提供します.
2.1 util.inheits
util.inhers(constructor,super Controuctor)は、オブジェクト間原型継承の関数(superControtouctorがモデルで定義している関数-prototypeだけを継承します.)を実現します.JavaScriptのオブジェクト指向特性はプロトタイプに基づいており、一般的なベースクラスとは異なり、Javascriptは対象継承の言語レベル特性を提供せず、プロトタイプコピーによって実現される.
2.2 util.inspect
util.inspectは、1つの任意のオブジェクトを文字列に変換し、通常はデバッグやエラー出力に使用されます.util.inspectは、簡単にオブジェクトを文字列に変換することはできません.
また、util.isAray()、util.isRegExp()、util.isDate()、util.isError()の4つのタイプのテストツールと、util.format()、util.debug()ツールがあります.具体的には、nodejs.orgサイトのDOCS/APIを参照してください.
3.イベント駆動events
eventsはNodejsの最も重要なモジュールであり、Nodejs自身のアーキテクチャはイベント式であり、それは唯一のインターフェースを提供し、Nodejsイベントプログラミングの基礎である.
3.1イベント送信機
eventsモジュールは一つのオブジェクトだけを提供します.events.EventEmitter、EventEmitterの核心はイベント送信とイベント傍受機能のパッケージです.各イベントは一つのイベント名(一つの文字列)といくつかのパラメータから構成され、各イベントはいくつかのモニターをサポートし、イベント登録時にはイベントモニターは順次呼び出しられ、イベントパラメータはコールバック関数のパラメータとして使用される.
一般API:
EventEmitter.on(event, listener)
EventEmitter.emit(event, [arg1], [arg2], [...]) event
EventEmitter.once(event, listener)
EventEmitter.removeListener(event, listener)
EventEmitter.removeAllListener([event])
3.2 errorイベントEventEmitterは特別なイベントerrorを定義しています.異常が発生した場合、通常はerrorイベントを送信します.EventEmitterは応答していないモニターを規定しています.Node.jsは異常としてプログラムを終了し、スタックを印刷します.一般的には、エラーバーイベントを送信する対象のためにモニターを設置し、エラーが発生してからプログラム全体が崩壊しないようにします.
3.3 EventEmitterを継承する
ほとんどは直接EventEmitterを使わないで、対象の中でそれを受け継ぐので、事件の応答の核心のモジュール(fs、net、http)を支持するのはすべてEventEmitterのサブクラスです.あるエンティティ機能を有するオブジェクトの実現イベントは意味に合致し、イベントの傍受および送信はオブジェクトの方法であるべきである.Javascriptオブジェクトのメカニズムは、プロトタイプに基づいています.複数の引き継ぎをサポートしています.EventEmitterを引き継いで、対象の元の継承関係を混乱させません.
4.ファイルシステムfs
fsモジュールの場合、ファイル操作のパッケージは、fsモジュールのすべての動作に非同期と同期の二つのバージョンが提供されます.
Nodejs非同期プログラミングインターフェースは、関数の最後のパラメータをコールバック関数として使用しています.通常は一つの関数は一つのコールバック関数しかありません.コールバック関数の実際のパラメータの中で最初はerrで、残りのパラメータは他の戻り値です.エラーが発生していない場合、errはnullまたはundefinedであり、エラーがある場合、通常はErrオブジェクトの例である.
5.HTTPサーバとクライアント
httpモジュールは、効率的なHTTPサーバと簡易なHTTPクライアントを実装しています.http.ServerはイベントベースのHTTPサーバであり、そのコアはNodejs下層C++の部分によって実現され、インターフェースはJavaScriptによってカプセル化され、高性能と簡易性を兼ね備えている.http.requestは、HTTPサーバに対する要求を開始するためのHTTPクライアントツールであり、例えばPingbackまたはコンテンツキャプチャを実現する.
5.1 HTTPサーバ
http.Server事件;
http.ServerRequest;HTTP要求情報
GET要求内容を取得する:
var url=require('url')
var util=require('util')
util.parse(url.parse(req.url,true)
POST要求内容を取得する:
Nodejsはデフォルトでは解析要求問題ではなく、手動で行う必要があります.
querystring.parseはpostを本物のPOST要求フォーマットに解析します.
http.ServerResonseはクライアントへの情報を返します.
5.2 HTTPクライアント
http.requestとhttp.get
http.Client Requestとhttp.Client Reponse