七日間学会NodeJS-学習ノート

12510 ワード

ネットでnodeJS教程を発見しました。7日間学会NodeJSという名前で、タイトルはとても魅力的です。私は7日間でマスターできるとは期待していません。入門したいだけです。以下は私の学習ノートと遭遇した問題です。
教程のURL:http://nqdeng.github.io/7-days-nodejs/
システム環境:virtual Box uuntu 14.10
nodeJSバージョン:0.0.15
 
一、据え付ける
私は3つの方法を使って、バイナリファイル、appt getコマンド、コンパイルインストールをインストールしました。
  • は、対応するシステムのバイナリファイルを公式サイトからダウンロードし、ダブルクリックしてインストールします。ウェブサイト:http://www.nodejs.org/download/
  • コマンドap-getを使ってuuntuでインストールします。コマンドは以下の通りです。
    sudo apt-get install nodejs
    
    sudo apt-get install npm
  • はホームページからソースをダウンロードして、コンパイルしてインストールします。ブログ園の記事を参考にしました。住所:http://www.cnblogs.com/hwpayg/archive/2012/11/04/2753404.html
  •  二、モジュール
    nodeJSでは、コードをモジュール化するのが一般的です。モジュールを作成する時、通常3つの変数を使います。require、export、module。
  • requireは、他のモジュールをロードして使用するために使用されます。例えば:
    1 var foo1 = require('./foo');
    
    2 var foo2 = require('./foo.js');
    
    3 var foo3 = require('/home/user/foo');
    
    4 var foo4 = require('/home/user/foo.js');
    
    5 
    
    6 //        JSON  
    
    7 var data = require('./data.json');
  • exportは、現在のモジュールにおいて公有の方法と属性を導出するための導出対象であり、他のモジュールにおいてrequireを使用して得られるものがexportオブジェクトである。以下の例は公有の方法を導き出す。
    1 exports.hello = function () {
    
    2     console.log('Hello World!');
    
    3 };
  • moduleオブジェクトは、現在のモジュールの導出対象を置き換えるのによく使われる、現在のモジュールのいくつかの関連情報にアクセスすることができる。
    1 module.exports = function () {
    
    2     console.log('Hello World!');
    
    3 };
  • 三、カバン
    いくつかのモジュールは複雑で、複数のサブモジュールからなる必要があります。複数のサブモジュールからなる大きなモジュールをカバンと呼びます。例えば:
    //     cat     ,main.js       
    
    - /home/user/lib/
    
        - cat/
    
            head.js
    
            body.js
    
            main.js
     この時、私たちはパッケージcatをロードする方式はrequireですが、ファイルにアクセスするように見えます。アクセス経路をより簡潔にするために、以下の調整が可能である。
    // package.json  cat     
    
    - /home/user/lib/
    
        - cat/
    
            + doc/
    
            - lib/
    
                head.js
    
                body.js
    
                main.js
    
            + tests/
    
            package.json
    その中で、package.jsonの内容は以下の通りです。
    1 {
    
    2     "name": "cat",
    
    3     "main": "./lib/main.js"
    
    4 }
    このように、パッケージcatをロードする方法は require('/home/user/lib/cat) 
    四、コマンドラインプログラム
    正常に、jsファイルを使う方式は node/home/user/bin/node-echo.js Hello World 。これは明らかにクールではないです。jsファイルをコマンドラインのように使ってほしいなら、 node-echo Hello World 。Linux環境では、次のような構成ができます。
  • jsファイルの上にコードを挿入する #! /usr/bin/env node ,現在のスクリプトを指定するための解析器です。
  • は、jsコードファイルの実行権限を付与する。 chmod+x/home/user/bin/node-echo.js 
  • ソフトチェーンを作成します。 sudo ln-s/home/user/bin/node-echo.js/usr/local/bin/node-echo 
  • このように私達は命令ラインプログラムを使うようにjsコードを使うことができます。
    五、工程目録
    普通、標準的な工程カタログはこのように見えます。
    - /home/user/workspace/node-echo/   #     
    
        - bin/                          #          
    
            node-echo
    
        + doc/                          #     
    
        - lib/                          #   API    
    
            echo.js
    
        - node_modules/                 #      
    
            + argv/
    
        + tests/                        #       
    
        package.json                    #      
    
        README.md                       #     
     六、ファイル操作
    ファイル操作
     1 var fs = require('fs');
    
     2 
    
     3 function copy(src, dst) {
    
     4     fs.writeFileSync(dst, fs.readFileSync(src));
    
     5 }
    
     6 
    
     7 function main(argv) {
    
     8     copy(argv[0], argv[1]);
    
     9 }
    
    10 
    
    11 main(process.argv.slice(2));
    上記のコードはsrcファイルの内容を一度にメモリに読み込んで、ディスクに一気に書き込みます。この操作は小さいファイルにしか使えません。ファイルが大きいとメモリが足りなくなります。
    大きなファイル操作
     1 var fs = require('fs');
    
     2 
    
     3 function copy(src, dst) {
    
     4     fs.createReadStream(src).pipe(fs.createWriteStream(dst));
    
     5 }
    
     6 
    
     7 function main(argv) {
    
     8     copy(argv[0], argv[1]);
    
     9 }
    
    10 
    
    11 main(process.argv.slice(2));
    Buffer(データブロック)
    nodeJSはBufferクラスを使用してバイナリデータの操作を行います。例えば:
     1 //     Buffer    
    
     2 var bin = new Buffer([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]);
    
     3 
    
     4 //          
    
     5 bin[0]; // => 0x68;
    
     6 
    
     7 //       
    
     8 var str = bin.toString('utf-8'); // => "hello"
    
     9 
    
    10 //            
    
    11 var bin = new Buffer('hello', 'utf-8'); // => <Buffer 68 65 6c 6c 6f>
    Stream(データストリーム)
     1 var rs = fs.createReadStream(src);
    
     2 var ws = fs.createWriteStream(dst);
    
     3 
    
     4 rs.on('data', function (chunk) {
    
     5     if (ws.write(chunk) === false) {
    
     6         rs.pause();
    
     7     }
    
     8 });
    
     9 
    
    10 rs.on('end', function () {
    
    11     ws.end();
    
    12 });
    
    13 
    
    14 ws.on('drain', function () {
    
    15     rs.resume();
    
    16 });
     
     File System(ファイルシステム)
     nodeJSは内蔵モジュールfsを通じてファイルに対する操作を提供します。fsのAPIは基本的に三つの種類に分けられます。
  • ファイル属性操作、例えば:fs.stat fs.chmod fs.chowd
  • ファイル内容操作:fs.readFile fs.readdir fs.writeFile fs.mkdir
  • 底のファイル操作、例えば:fs.open fs.read fs.write fs.close
  • fs.readFileを例にとって、fsのAPIの使い方を説明します。
    1 fs.readFile(pathname, function (err, data) {
    
    2     if (err) {
    
    3         // Deal with error.
    
    4     } else {
    
    5         // Deal with data.
    
    6     }
    
    7 });
     
    七、ネットワークプログラミング 
    簡単なhttpサーバを作成します。
    1 var http = require('http');
    
    2 
    
    3 http.createServer(function (request, response) {
    
    4     response.writeHead(200, { 'Content-Type': 'text-plain' });
    
    5     response.end('Hello World
    '); 6 }).listen(8124);
     
    注意:1024以下のポートを傍受するには、root権限が必要です。