Commits

Yohei Sasaki committed a27a35d

[mod] done standardlib.

  • Participants
  • Parent commits 818bd81

Comments (0)

Files changed (4)

 build/
+.DS_Store

source/intro/module.rst

 
 ::
 
-    functoin ClassA(name){
+    function ClassA(name){
        this._name = name
     }
 
 
 
 .. [#f1] http://wiki.commonjs.org/wiki/Modules
-.. [#f2] 厳密には Google V8 仕様に従います.<V8のサイト 'http://code.google.com/p/v8/'>_ には ECMA-262 3rd Editionの実装であることが明記されていますが,5th edition の仕様も実装しているようです.
+.. [#f2] 厳密には Google V8 の実装に依存します. `V8のサイト <http://code.google.com/p/v8/>`_ には `ECMA-262 <http://www.ecma-international.org/publications/standards/Ecma-262.htm>`_ 3rd Editionの実装であることが明記されていますが,5th edition の仕様も一部実装しているようです.

source/intro/src/http_client.js

+var http = require('http'),
+    url = require('url'),
+    querystring = require('querystring');
+
+function sample(urlStr, callback){
+   var client;
+   if( h.protocol == 'http:' ){
+      client = http.createClient(h.port || 80, h.hostname);
+   }else if( h.protocol == 'https:' ){
+      client = http.createClient(h.port || 443, h.hostname, true);
+   }else{
+      callback && callback(new Error('http or https only supported'));
+   }
+   var p = h.pathname;
+   if( h.search ){
+      p = p + h.search;
+   }
+   /*
+     if( h.hash ){
+     p = p + h.hash;
+     }
+   */
+   var req = client.request('GET', p, {'host': h.hostname});
+   req.on('response', function(response){
+      var body = '';
+      response.on('data', function(chunk){
+         body = body + chunk;
+      });
+      response.on('end', function(){
+         callback && callback(undefined, body, response);
+      });
+   });
+
+}
+

source/intro/standardlib.rst

 グローバルオブジェクト
 ------------------------------------------------
 
-グローバルオブジェクトはどのモジュール/コンテキストからも参照可能なオブジェクトです. 次の4つがあります.
+グローバルオブジェクトはどのモジュール/コンテキストからも参照可能なオブジェクトです. 次の6つがあります.
 
 process
-  標準入出力,実行環境,コマンドライン引数,環境変数などランタイムプロセス関連の機能を提供します.よく使うのは process.uncaughtException ですが,詳細は :doc:`misc/exception` 例外処理を参照してください.
+  標準入出力,実行環境,コマンドライン引数,環境変数などランタイムプロセス関連の機能を提供します.その中でも **uncaughtException** は重要なイベントです.詳細は :doc:`../misc/exception` を参照してください.
 
+module
+  1つのjsファイルは1つのモジュールであり,現在のモジュールの情報を格納しています.
 
+require
+  require(modulePath) でモジュールを読み込めるほか, require.resolve(modulePath) で該当モジュールのフルパスを返します.モジュール読み込みがうまくいかない場合は require.paths.unshift(path) でパスを追加してください.
 
+__filename
+  現在実行しているスクリプトのファイル名を返します.Python __file__ 
 
-util
+__dirname
+  現在実行しているスクリプトのディレクトリ名を返します.
+
+global
+  グローバルスコープを示すための名前空間専用のオブジェクトです.
+
+そのほか console オブジェクトやArray, String, Error などのクラスオブジェクト(関数) も使えますが,APIのドキュメント上はGlobalオブジェクトではありません(プリミティブ扱いです).
+
+また以下のタイマ関数もモジュールを読み込むことなく利用可能です.
+
+- setTimeout
+- clearTimeout
+- setInterval
+- clearInterval
+
+
+便利な関数
 ------------------------------------------------
+
+util モジュールは名前の通りユーティリティ関数を含むモジュールです.0.2.X 系では sys モジュールでした.
+
+- util.inspect(obj) はオブジェクトの詳細をダンプします.
+
+子プロセスを実行する
+------------------------------------------------
+
+child_process モジュールを使うことでプロセスを起動することができます.
+
+- child_process.spawn は標準入出力を使って連携させるときなどに活用できます.
+- child_process.exec は単にプロセスを実行したいときに活用できます.
+
+ファイルシステム
+------------------------------------------------
+
+fs モジュールはファイルシステム関連の関数を提供します.このモジュールは,同期/非同期それぞれのメソッドを提供します. fs.asyncMethod が非同期版のメソッド名で,対応してメソッド fs.asyncMethodSync が同期版として提供されています.
+
+- fs.writeFile(path, data, function(err){ /* ... */ }); を使えば簡単にファイルの書き込みが可能です.
+- fs.readFile(path, function(err, data){ /* ... */ }) を使えば簡単にファイルの読み込みが可能です
+- fs.open を使うとファイルをストリームとして扱うことができます.巨大なファイルを扱う場合はストリームを活用してください.
+
+ストリーム
+------------------------------------------------
+
+fs.open や req.on('response') で得られるオブジェクトはストリームと呼ばれるオブジェクトです.Non-Blocking IOを制御するにはストリームオブジェクトのメソッド/イベントを知っておく必要があります. よく使うものをここであげます.
+
+Readable Stream: 読み込みに使うストリーム
+++++++++++++++++++++++++++++++++++++++++++++++++
+
+Event('data', function(data){ /* ... */ })
+   データを受信時に発火されるイベントです
+Event('end', function(){ /* ... */ })
+   EOF到達時/TCP FIN受信時に発火されるイベントです.
+
+Writable Stream: 書き込みに使うストリーム
+++++++++++++++++++++++++++++++++++++++++++++++++
+
+stream.write(str)
+   データを書き込みます. 
+stream.end(str)
+   EOFに相当します.もしくはFINを書き込みます.
+   str が指定される場合は,その文字列を書き込んでから終了させます.
+
+http,url,querystring
+------------------------------------------------
+
+http モジュールを使うことで HTTP 関連のやりとりを実装できます.多くの場合 url,querystring モジュールも一緒に使うことになるでしょう.
+
+http.Server については :doc:`../webapp/http_server` の章で説明します.
+
+あるURLが文字列で与えられた場合次のような形でクライアントを作ってデータをダウンロードします.
+
+.. literalinclude:: src/http_clinet.js
+    :language: javascript
+    :linenos:
+