ノードの機能(3):ノードの内蔵モジュール


ノード内蔵モジュール


異なるバージョンの
  • の間には、
  • の差があります.
  • オペレーティングシステム、クライアントが要求するアドレスなどの情報は非常に有用である
  • .

    オペレーティングシステムモジュール

  • オペレーティングシステムの情報
  • 通常のWebサービスを公開する頻度は高くない
  • オペレーティングシステムごとに異なるサービスを提供する場合は、オペレーティングシステムモジュールが便利です.
  • の代表的な方法
    os.arch():process.archと同じ
    os.platform():process.プラットフォームと同じ
    os.type():オペレーティングシステムのタイプを表示する
    os.uptime():オペレーティングシステムが起動してからの実行時間を表示します.(process.uptime():ノードの実行時間)
    os.hostname():コンピュータの名前を表示
    os.release():オペレーティングシステムのバージョンを表示する
    os.homedir():ホームディレクトリパスを表示
    os.tmpdir():一時ファイルを格納するパスを表示
    os.cpus():コンピュータのコア情報を表示する
    os.cpus().length:カーネル数(ただし、ノード上で単一スレッドプログラミングを行う場合は1つのカーネルしか使用できません.ただし、クラスタモジュールを使用する場合はカーネル数に応じてプロセスを増やすことができます)
    os.freemem():使用可能なメモリを表示(RAM)
    os.totalmem():
  • メモリ合計を表示
  • コード
  • const os = require('os');
    console.log('운영체제 정보---------------------------------');
    console.log('os.arch():', os.arch());
    console.log('os.platform():', os.platform());
    console.log('os.type():', os.type());
    console.log('os.uptime():', os.uptime());
    console.log('os.hostname():', os.hostname());
    console.log('os.release():', os.release());
    console.log('경로------------------------------------------');
    console.log('os.homedir():', os.homedir());
    console.log('os.tmpdir():', os.tmpdir());
    console.log('cpu 정보--------------------------------------');
    console.log('os.cpus():', os.cpus());
    console.log('os.cpus().length:', os.cpus().length);
    console.log('메모리 정보-----------------------------------');
    console.log('os.freemem():', os.freemem());
    console.log('os.totalmem():', os.totalmem());
  • 運転結果:
  • $ node os
    운영체제 정보---------------------------------
    os.arch(): x64  //process.arch와 동일
    os.platform(): win32 //process.platform과 동일
    os.type(): Windows_NT //운영체제의 종류를 보여줌
    os.uptime(): 53354 //운영체제 부팅 이후 흐른 시간을 보여줌.  
    cf. process.uptime(): 노드의 실행 시간
    os.hostname(): DESKTOP-RRANDNC //컴퓨터의 이름을 보여줌
    os.release(): 10.0.18362 //운영체제의 버전을 보여줌
    경로---------------------------------
    os.homedir(): C:\Users\zerocho //홈 디렉터리 경로를 보여줌
    os.tmpdir(): C:\Users\zerocho\AppData\Local\Temp 
    //임시 파일 저장 경로를 보여줌
    cpu 정보---------------------------------
    os.cpus(): [ { model: 'Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz',
        speed: 2904,
        times: { user: 970250, nice: 0, sys: 1471906, idle: 9117578, irq: 359109 } },
        // 컴퓨터의 코어 정보를 보여줌. 
        다른 코어가 있다면 나머지 코어의 정보가 나옴
      ]
    os.cpus().length: 6
    //코어의 개수가 나옴
    (그러나 노드에서 싱글 스레드 프로그래밍을 하면 어차피 코어 1개만 사용함
    -단, cluster모듈을 사용하는 경우 코어 개수에 맞춰서 
    프로세스 늘리기 가능)
    메모리 정보---------------------------------
    os.freemem(): 23378612224 
    //사용 가능한 메모리(RAM)를 보여줌
    os.totalmem(): 34281246720 
    //전체 메모리 용량을 보여줌

    path

  • モジュール
  • では、フォルダとファイルのパスを簡単に操作できます.
  • オペレーティングシステムごとにパス区切り記号(,/)が異なるため、
    (例)
    ウィンドウ:C:UsersZeroCho
    UNIXベースのオペレーティングシステム:MacおよびLinux(POSIX):/home/zerocho
  • メソッド
    filename:現在のファイルのパスを表示する
    dirname:現在のフォルダのパスを表示する
    path.sep:パスの区切り記号.ウィンドウは、POSIXは/
    path.区切り記号:環境変数の区切り記号.ウィンドウはセミコロンです.POSIXは以下を含む:
    process.env.PATH:複数のパスを表示する
    path.dirname(パス):ファイルが存在するフォルダのパス
    path.extname(パス):ファイルの拡張子
    path.basename(パス、拡張子):拡張子を含むファイルの名前を表示します.ファイルの名前だけを表示するには、ファイルの拡張子をbasenameの2番目の引数として使用します.
    path.parse(パス):ファイルパスをルート、dir、base、ext、nameに分割
    path.format(オブジェクト):path.parse()オブジェクトをファイルパスにマージ
    path.normalize(パス):または予期せぬ複数回使用または混合使用時に通常のパスに変換
    path.isAbsolute(パス):ファイルのパスをtrueまたはfalse(絶対パスまたは相対パス)に通知します.
    path.相対(標準パス、比較パス):2つのパスを挿入すると、最初のパスから2番目のパスへの移動方法を通知します.
    path.join(パス、...):複数の引数を追加すると、1つのパスにマージされます.相対パス...(親ディレクトリ)と.(現在位置)も自己処理
    path.resolve(パス,...):path.join()と似ていますが、差(絶対パス)
  • があります.
  • コード
  • const path = require('path');
    const string = __filename;
    console.log('path.sep:', path.sep);
    console.log('path.delimiter:', path.delimiter);
    console.log('------------------------------');
    console.log('path.dirname():', path.dirname(string));
    console.log('path.extname():', path.extname(string));
    console.log('path.basename():', path.basename(string));
    console.log('path.basename - extname:', path.basename(string, path.extname(string)));
    console.log('------------------------------');
    console.log('path.parse()', path.parse(string));
    console.log('path.format():', path.format({
      dir: 'C:\\users\\zerocho',
      name: 'path',
      ext: '.js',
    }));
    console.log('path.normalize():', path.normalize('C://users\\\\zerocho\\\path.js'));
    console.log('------------------------------');
    console.log('path.isAbsolute(C:\\):', path.isAbsolute('C:\\'));
    console.log('path.isAbsolute(./home):', path.isAbsolute('./home'));
    console.log('------------------------------');
    console.log('path.relative():', path.relative('C:\\users\\zerocho\\path.js', 'C:\\'));
    console.log('path.join():', path.join(__dirname, '..', '..', '/users', '.', '/zerocho'));
    console.log('path.resolve():', path.resolve(__dirname, '..', 'users', '.', '/zerocho'));
  • コンソール結果
  • $ node path
    path.sep: \  //경로의 구분자. 윈도는 \, POSIX는 /
    path.delimiter: ; //환경 변수의 구분자. 윈도는 세미콜론;, POSIX는 :
    //process.env.PATH: 여러 경로가 나타남
    ------------------------------
    path.dirname(): C:\Users\zerocho // 첫번째 인자 경로. 파일이 위치한 폴더 경로
    path.extname(): .js // 첫번째 인자 경로. 파일의 확장자
    path.basename(): path.js // 첫번째 인자 경로. 파일의 이름(확장자 포함)을 표시. 파일의 이름만 표시하고 싶다면 basename의 두 번째 인수로 파일의 확장자를 넣으면 됨
    path.basename - extname: path
    ------------------------------
    path.parse() {
    path.basename(): path.js
    path.basename - extname: path
    ------------------------------
    path.parse() {
      root: 'C:\\',
      dir: 'C:\\Users\\zerocho',
      base: 'path.js',
      ext: '.js',
      name: 'path'
    }
    // 첫번째 인자 경로. 파일 경로를 root, dir, base, ext, name으로 분리
    path.format(): C:\users\zerocho\path.js
    // 첫 번째 인자 객체. 
    path.parse()한 객체를 파일 경로로 합침
    path.normalize(): C:\users\zerocho\path.js
    // 첫 번째 인자 경로. /나 \를 실수로 여러 번 사용했거나 혼용했을 때 정상적인 경로로 변환
    ------------------------------
    path.isAbsolute(C:\\): true
    path.isAbsolute(./home): false
    // 첫 번째 인자 경로. 파일의 경로가 절대경로인지 상대경로인지를 true나 false로 알림
    ------------------------------
    path.relative(): ..\..\.. 
    //첫 번째 인자 기준경로. 두 번째 인자 비교경로.
    첫 번째 경로에서 두 번째 경로로 가는 방법을 알림
    path.join(): C:\Users\zerocho
    //여러 인수를 넣으면 하나의 경로로 합침. 상대경로인 ..(부모 디렉터리)과 .(현 위치)도 알아서 처리
    path.resolve(): C:\zerocho
    //path.join()과 비슷하지만 차이 존재(절대경로)
  • path.join vs path.resolve :
    /に遭遇した場合、path.resolveは、ルートフォルダまたはノードプロセスに基づいて実行される絶対パスと見なし、前のパスは無視しますがpath.joinは、相対パス(現在のファイルは-require.mainに基づいている)を使用して
  • を処理する.
    path.join('/a','/b','c'); /* 결과: /a/b/c */
    path.resolve('/a','/b','c'); /* 결과: /b/c */
  • を使用する場合は、vsを使用します.
    js文字列には(特殊文字であるため)が使用されます.
    それ以外の場合は
    複雑ですが、pathを使用するとすべての問題を解決できます.
    別のスタイルのパスを使用
  • ウィンドウでのPOSIXスタイルパスの使用
    : path.posix.sepまたはpath.posix.join()
  • POSIXウィンドウスタイルパスを使用
    : path.win32.sepまたはpath.win32.join()
  • url


    モジュール
  • により、インターネット・アドレスを簡単に操作できます.
  • :
    (ノード7バージョン後)WHTWG
    (以前のノードから使用)既存url
  • の既存ノードが必要な場合:
    pathname部分のアドレスのみで、host部分はありません.
    例:/book/bookList.apsx
  • 図解:上部は既存、下部はWHATWG形式
  • urlモジュールの説明
  • 新しいURL(「アドレス」):
    WHATWG方式
    整理済みアドレス
    プロパティにはusername、password、origin、searchParams(テーブルの先頭にキー=値でデータを渡し、複数のキーがある場合は&で区切る)が含まれます.
  • url.parse(アドレス):
    伝統的な方式.
    ぶんかいアドレス
    属性には、usernameやpasswordではなくauth、searchParamsではなくqueryなどが含まれます.
  • url.format(オブジェクト):
    WHATWG方式のurlも既存ノードのurlも利用可能である.
    分解したurlオブジェクトを元の状態に再アセンブリします.
  • コード
  • const url = require('url');
    const { URL } = url;
    const myURL = new URL('http://www.gilbut.co.kr/book/bookList.aspx?sercate1=001001000#anchor');
    console.log('new URL():', myURL);
    console.log('url.format():', url.format(myURL));
    console.log('------------------------------');
    const parsedUrl = url.parse('http://www.gilbut.co.kr/book/bookList.aspx?sercate1=001001000#anchor');
    console.log('url.parse():', parsedUrl);
    console.log('url.format():', url.format(parsedUrl));
  • コンソール
  • new URL(): URL {
      href: 'http://www.gilbut.co.kr/book/bookList.aspx?sercate1=001001000#anchor',
      origin: 'http://www.gilbut.co.kr',
      protocol: 'http:',
      username: '',
      password: '',
      host: 'www.gilbut.co.kr',
      hostname: 'www.gilbut.co.kr',
      port: '',
      pathname: '/book/bookList.aspx',
      search: '?sercate1=001001000',
      searchParams: URLSearchParams { 'sercate1' => '001001000' },
      hash: '#anchor'
    }
    url.format(): http://www.gilbut.co.kr/book/bookList.aspx?sercate1=001001000#anchor
    ------------------------------
    url.parse(): Url {
      protocol: 'http:',
      slashes: true,
      auth: null,
      host: 'www.gilbut.co.kr',
      port: null,
      hostname: 'www.gilbut.co.kr',
      hash: '#anchor',
      search: '?sercate1=001001000',
      query: 'sercate1=001001000',
      pathname: '/book/bookList.aspx',
      path: '/book/bookList.aspx?sercate1=001001000',
      href: 'http://www.gilbut.co.kr/book/bookList.aspx?sercate1=001001000#anchor'
    }
    url.format(): http://www.gilbut.co.kr/book/bookList.aspx?sercate1=001001000#anchor
    WHATWGのSearchParamsについて
  • WHATWG説明
    WHATWGはsearch部分をsearchParamsという特殊なオブジェクトに戻すために非常に有用である.
  • search
    searchは、アドレスを介してデータを転送するために使用されます.
    searchは疑問符(?)データ
  • をキー=値で渡す.
  • SearchParamsの利点(vs query)
    queryはquerystringモジュール
  • を必要とする
  • メソッド
    .getall(鍵):鍵に対応するすべての値を取得します.categoryキーにはnodejsとjavascriptの2つの値があります.
    .get(キー):キーに対応する最初の値のみ取得
    .has(鍵):鍵が存在するかどうかを確認する
    .keys():searchParamsのすべてのキーを反復オブジェクトとしてインポートします(ES 2015構文).
    .values():searchParamsのすべての値を反復オブジェクトとしてインポート
    .append(キー、値):キーを追加します.同じキーの値がある場合は、保持して追加します.
    .set(キー、値):appendと同様ですが、同じキーの値をすべて削除し、新しいキーを追加します.
    .delete(鍵):鍵の削除
    .toString():操作したsearchParamsオブジェクトを文字列に再設定します.この文字列をsearchに代入すると、アドレスオブジェクトに反映されます.
  • コード
  • const { URL } = require('url');
    const myURL = new URL('http://www.gilbut.co.kr/?page=3&limit=10&category=nodejs&category=javascript');
    console.log('searchParams:', myURL.searchParams);
    console.log('searchParams.getAll():', myURL.searchParams.getAll('category'));
    console.log('searchParams.get():', myURL.searchParams.get('limit'));
    console.log('searchParams.has():', myURL.searchParams.has('page'));
    console.log('searchParams.keys():', myURL.searchParams.keys());
    console.log('searchParams.values():', myURL.searchParams.values());
    myURL.searchParams.append('filter', 'es3');
    myURL.searchParams.append('filter', 'es5');
    console.log(myURL.searchParams.getAll('filter'));
    myURL.searchParams.set('filter', 'es6');
    console.log(myURL.searchParams.getAll('filter'));
    myURL.searchParams.delete('filter');
    console.log(myURL.searchParams.getAll('filter'));
    console.log('searchParams.toString():', myURL.searchParams.toString());
    myURL.search = myURL.searchParams.toString();
  • コンソール結果
  • searchParams: URLSearchParams {
      'page' => '3',
      'limit' => '10',
      'category' => 'nodejs',      
      'category' => 'javascript' } 
    searchParams.getAll(): [ 'nodejs', 'javascript' ]
    searchParams.get(): 10
    searchParams.has(): true
    searchParams.keys(): URLSearchParams Iterator { 'page', 'limit', 'category', 'category' }
    searchParams.values(): URLSearchParams Iterator { '3', '10', 'nodejs', 'javascript' }
    [ 'es3', 'es5' ]
    [ 'es6' ]
    []
    searchParams.toString(): page=3&limit=10&category=nodejs&category=javascript
    querystring
  • 説明
    既存ノードのurlを使用する場合、モジュール
  • は、検索部分を使いやすいオブジェクトにする
  • コード