Nodejsコアモジュール概要

6751 ワード

github記事のリンク:https://github.com/Vibing/blo...
nodejsを学ぶには、JavaScriptを学ぶには、関数、オブジェクト、データの種類、BOM、DOMなどを身につけなければなりません.nodejsコアも多く、ここではいくつかのコアを紹介します.Eventsモジュール、fsモジュール、streamの使用、httpモジュール.
イベント
イベントドライブ、非ブロックIOはnodejsの特徴ですので、Eventsは非常に重要なモジュールです.nodeのほとんどのモジュールはEventsを継承している.
イベントは購読モードをリリースすることで実現されます.ブラウザでは、例えばclickイベントがあります.
$('button').on('click',()=>{
    //  click  
})
もちろん、イベントをカスタマイズすることもできます.
//     
$('div').bind('hello',()=>{
    alert('hello')
});

//    
$('div').trigger('hello');
nodeではEventsモジュールはどうやって使いますか?クラスを定義して、Eventsを継承します.
const EventEmit = require('events');

//        
class Player extends EventEmit { }

const player = new Player();

//      
player.on('play', ( param )=>{
    console.log(`     《${param}》`)
})

play.emit('play','    '); //      《    》
play.emit('play','   ');   //      《   》
イベントを一回だけ実行したいなら、Onceを使うことができます.
//      
player.once('play', ( param )=>{
    console.log(`     《${param}》`)
})

play.emit('play','    '); 
play.emit('play','   ');  
この時はプレーヤーをプリントアウトして「天地をはだけ」を再生します.
上にも言ったように、nodeの中のほとんどのモジュールはEventsを継承しています.例えば、stream、fs、httpなどです.ブラウザのclickのように、元々あったものです.下を見たら、事件をたくさん使うところがあります.
fsファイルシステムモジュール
fsの全綴りはfile system、すなわちファイルシステムである.ファイルシステムである以上、その主な役割はファイルの新規作成、修正内容、読み書きなどです.
fs.statはフォルダとファイルに関する情報を取得します.
フォルダ情報を表示
fs.stat('./logs', (err, stats) => {
  if (err) {
    console.log(err);
    return;
  }

  console.log('  :', stats.isDirectory());
  console.log('  :', stats.isFile());
  console.log('  :', stats.size);
});

//    
  : true
  : false
  : 160
ファイル情報を表示
fs.stat('./fs.js', (err, stats) => {
  if (err) {
    console.log(err);
    return;
  }

  console.log('  :', stats.isDirectory());
  console.log('  :', stats.isFile());
  console.log('  :', stats.size);
});

//    
  : false
  : true
  : 2087
fs.mkdir作成フォルダ
//     
fs.mkdir("./logs", err => {
  if (err) {
    console.log(err);
    return;
  }
  console.log("logs      ");
});
fs.mkdir は非同期的な方法であり、同期したい場合はfs.mkdirSyncを使用することができる.
fs.mkdirSync('./logs2'); //       
fs.writeFile書き込み内容
fs.writeFile('./logs2/hello.log', '  ~', err => {
  if (err) {
    console.log(err);
    return;
  }
  console.log('    ');
});
注意:ファイルが存在しないとファイルを作成します.ファイルに内容があれば上書きします.
私たちは内容を上書きするのではなく、追加するのであれば、アプリを使うことができます.
fs.appendFile("./logs/hello.log", "hello~
", err => { if (err) { console.log(err); return; } console.log(" "); });
fs.readFileはファイルの内容を読み取ります.
//       
fs.readFile("./logs/hello.log", "utf8", (err, stats) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log(stats);
});
fs.readdir読み取りフォルダ
//      
fs.readdir("./logs", (err, files) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log(files); //               
});

//    
[ 'data-write.json', 'data.json', 'traking.log' ]
fs.renameがファイル名を変更します.
//       hello.log   tranking.log
fs.rename("./logs/hello.log", "./logs/traking.log", err => {
  if (err) {
    console.log(err);
    return;
  }

  console.log("    ");
});
ディレクトリのすべてのファイルを削除します.
//        
fs.readdirSync("./logs").map(file => {
  //     unlink
  fs.unlink(`./logs/${file}`, err => {
    if (err) {
      console.log(err);
      return;
    }
    console.log("      ");
  });
});
フォルダを削除
//                                       
fs.rmdir("./logs", err => {
  if (err) {
    console.log(err);
    return;
  }
  console.log("      ");
});
Stream流
水の流れと理解できる.ただここはデータフローです.流れの意味は3つです.
  • ソースがあります.
  • 終点があります.
  • .
  • ソースから終点まで流れる
  • streamを使ってファイルを読み、書きます.
    const fs = require('fs');
    
    const fileReadStream = fs.createReadStream('./logs/data.json');
    const fileWriteStream = fs.createWriteStream('./logs/data-write.json');
    
    
    /*            */
    fileReadStream.on('data', chunk => {
      fileWriteStream.write(chunk); //                     
    });
    
    fileReadStream.on('error', err => {
      console.log('  :', err);
    });
    
    fileReadStream.on('end', () => {
      console.log('  ');
    });
    上のコードには、読み取り可能なストリーム-->書き込み可能なストリームが確立されています.これは上で述べた3つの点を満たしています.ソース(読み取り可能なストリーム)があり、終点(書き込み可能なストリーム)があり、ソースから終点まで(一つのファイルのデータが他のファイルに流れています).
    コードからもわかるように、StreamはEventsを継承しています.data、error、endなどのイベントが含まれています.
    pipeを使う
    上のコードを変えます.
    //   pipe  
    fileWriteStream.on('pipe', source => {
      console.log(source);
    });
    
    /*   pipe   */
    fileReadStream.pipe(fileWriteStream);
    pipeは、水道管として理解され、読み取り可能なストリームと書き込み可能なストリームとの間に水道管が接続されており、dataイベントを監視する必要がなく、同じ効果を達成するために使用しやすいです.
    Httpモジュール
    httpモジュールは主にhttpサービスを構築し、ユーザー要求情報などを処理するために使用されます.
    httpを使ってお願いします
    const http = require('http');
    
    //     http  
    const options = {
      protocol: 'http:',
      hostname: 'www.baidu.com',
      port: '80',
      method: 'GET',
      path: '/img/baidu_85beaf5496f291521eb75ba38eacbd87.svg'
    };
    
    let responseData = '';
    
    const request = http.request(options, response => {
      console.log(response.statusCode); //           
    
      response.setEncoding('utf8');
    
      response.on('data', chunk => {
        responseData += chunk;
      });
    
      response.on('end', () => {
        console.log(responseData);
      });
    });
    
    request.on('error', error => {
      console.log(error);
    });
    
    request.end();
    
    httpを使ってサービスを作成します.
    //   http     
    const port = 3000;
    const host = '127.0.0.1';
    
    const server = http.createServer();
    
    server.on('request', (request, response) => {
      response.writeHead(200, {
        'Content-Type': 'text/plain'
      });
      response.end('Hello World
    '); }); server.listen(port, host, () => { console.log(`Server running at http://${host}:${port}/`); });
    Nodeコアモジュールについては、Buffer、crypt暗号化、globalグローバル変数、netネットワーク、OS OS OS OSなどがありますが、上で紹介したのは使用頻度が非常に高いモジュールです.
    後の文章は引き続き紹介します.詳しいアプリは公式サイトを参照してください.