Nodejsコアモジュール


  • グローバルオブジェクト
  •     Nodejsではグローバルオブジェクトはグローバル変数の宿主として、グローバル変数はすべてglobalオブジェクトの属性であり、Nodejsで直接アクセスできるオブジェクトは、一般的にはglobalの属性であり、consone、processなどである.
  • の最外層で定義された変数
  • グローバルオブジェクトの属性.
  • 暗黙的に定義された変数(直接割当値が定義されていない変数)
  • グローバル変数を定義すると、この変数はグローバルオブジェクトの属性にもなります.
    注意:グローバル変数の導入を避けるために、var定義変数を永遠に使用します.グローバル変数は名前空間を汚染し、コード結合のリスクを高めます.
    1.1.process
  •     process.argvコマンドラインパラメータ配列、第一要素node、第二ステップファイル名、第三から各要素は実行パラメータ
  • です.
    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'
  •     process.stdout標準出力ストリーム
  •     通常はconsolie.log()を使用しています. process.stdout.writeはもっと下のインターフェースを提供します.
  • process.stdin標準入力ストリーム
  •     最初は一時停止されました.標準入力からデータを読み出すには、ストリームを復元し、手動でストリームを作成するイベント応答関数が必要です.
    //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
  • process.nextTickはイベントサイクルのために一つのタスクを設定します.
  • 複雑な仕事をばらばらにして、小さな事件に変えることができます.
    例:
    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
  • consone.log()
  •     流れの文字を標準に出力し、改行で終了します.パラメータが一つしかない場合はパラメータ文字列形式を出力します.複数のパラメータがある場合、C言語のprintf()と同様のフォーマットで出力されます.
  • consone.error()
  •     同consolie.log()は、標準エラーフローに出力される.
  • consone.trace()
  •     現在の呼び出しスタックを標準エラーフローに出力します.
    $node
    >consone.trace()
    Trace
        at repl:1:10
        at REPL Server.self.eval(repl.js:110:21)
        at Interface.(repl.js:239:12)
        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