Node.js グローバル オブジェクト

Node.jsルーティング Node.js の共通ツール

JavaScript には、グローバル オブジェクト (グローバル オブジェクト) と呼ばれる特別なオブジェクトがあり、このオブジェクトとそのすべてのプロパティ、つまりグローバル変数にプログラム内のどこからでもアクセスできます。

ブラウザの JavaScript では、通常 window がグローバル オブジェクトですが、 Node.js のグローバル オブジェクトは globall ですが、すべてのグローバル変数 (global1l 自体を除く) はグローバルです オブジェクトのプロパティ。

 

Node.js では、アプリケーションに globall を含めずに、globall のプロパティに直接アクセスできます。

グローバル オブジェクトとグローバル変数

globall の最も基本的な役割は、グローバル変数のホストとしての役割です。 ECMAScriptの定義によれば、以下の条件を満たす コンポーネントの変数はグローバル変数です。

  • 最外層で定義された変数。
  • グローバル オブジェクトの属性。
  • 暗黙的に定義された変数 (直接代入用に定義されていない変数)。

グローバル変数を定義すると、その変数はグローバル オブジェクトのプロパティにもなり、その逆も同様です。 注意が必要です Node.js では、すべてのユーザー コードが現在のモジュールに属しているため、最外部レベルで変数を定義できないことに注意してください。 また、モジュール自体は最も外側のコンテキストではありません。

注: グローバル変数の導入を避けるために、変数の定義に var を使用しないことをお勧めします。グローバル変数は名前空間を汚染し、コード結合のリスクを高めるためです。

__filename

__filename は、現在実行中のスクリプトのファイル名を示します。 ファイルが配置されている絶対パスが出力されますが、コマンド ライン パラメーターで指定されたファイル名と必ずしも同じであるとは限りません。 モジュール内の場合、戻り値はモジュール ファイルへのパスです。

 

ファイル main.js を作成します。コードは次のとおりです。

// グローバル変数 __filename の値を出力します
console.log( __filename );

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js
/web/com/runoob/nodejs/main.js

__dirname

__dirname は、現在実行中のスクリプトが配置されているディレクトリを示します。

ファイル main.js を作成します。コードは次のとおりです。

// グローバル変数 __dirname の値を出力します
console.log( __dirname );

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js
/web/com/runoob/nodejs

setTimeout(cb, ms)

setTimeout(cb, ms) グローバル関数は、指定されたミリ秒 (ms) 数の経過後に、指定された関数 (cb) を実行します。 :setTimeout() 指定された関数を 1 回だけ実行します。

タイマーを表すハンドル値を返します。

ファイル main.js を作成します。コードは次のとおりです。

function printHello(){
    console.log( "Hello, World!");
}
// 2秒後に上記の関数を実行します
setTimeout(printHello, 2000);

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js
Hello, World!

clearTimeout(t)

clearTimeout( t ) グローバル関数は、setTimeout() で事前に作成されたタイマーを停止するために使用されます。 パラメータ t は、setTimeout() 関数によって作成されるタイマーです。

ファイル main.js を作成します。コードは次のとおりです。

function printHello(){
    console.log( "Hello, World!");
}
// 2秒後に上記の関数を実行します
var t = setTimeout(printHello, 2000);

// タイマーをクリア
clearTimeout(t);

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js

setInterval(cb, ms)

setInterval(cb, ms) グローバル関数は、指定されたミリ秒 (ms) 数の経過後に、指定された関数 (cb) を実行します。

タイマーを表すハンドル値を返します。 タイマーはclearInterval(t) 関数を使用してクリアできます。

setInterval() メソッドは、clearInterval() が呼び出されるかウィンドウが閉じられるまで、関数を呼び出し続けます。

ファイル main.js を作成します。コードは次のとおりです。

function printHello(){
    console.log( "Hello, World!");
}
// 2秒後に上記の関数を実行します
setInterval(printHello, 2000);

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js
Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! ……

上記のプログラムは 2 秒ごとに「Hello, World!」を出力し、ctrl + c ボタンを押すまで永久に実行されます。

console

console は、Internet Explorer の JScript エンジンによって提供されるデバッグ ツールであるコンソール標準出力を提供するために使用され、その後徐々にブラウザーの実装標準になりました。

Node.js はこの標準に従い、標準出力ストリーム (stdout) または標準エラー ストリーム (stderr) に文字を出力するために使用される、慣例的な動作と一致するコンソール オブジェクトを提供します。

console メソッド

console オブジェクトのメソッドは次のとおりです。

番号 メソッドと説明
1 console.log([data][, ...])
改行で終了する標準出力ストリームに文字を出力します。 。 このメソッドは複数のパラメータを受け取ります。パラメータが 1 つしかない場合は、このパラメータの文字列形式を出力します。 パラメータが複数ある場合は、C言語のprintf()コマンドと同様の形式で出力されます。
2 console.info([data][, ...])
このコマンドの目的は、情報メッセージを返すことです。 command chromeではテキストのみが出力され、残りには青い感嘆符が表示されることを除けば、console.logと大きな違いはありません。
3 console.error([data][, ...])
エラー メッセージを出力します。 エラーが発生すると、コンソールに赤い十字が表示されます。
4 console.warn([data][, ...])
警告メッセージを出力します。 コンソールに黄色の感嘆符が表示されます。
5 console.dir(obj[, options])
オブジェクトを検査する (検査) ために使用され、読みやすく、印刷されます。形式が表示されます。
6 console.time(label)
計時が開始されたことを示す時間を出力します。
7 console.timeEnd(label)
タイミングの終了を示す終了時刻。
8 console.trace(message[, ...])
スタック内で現在実行されているコードの呼び出しパス (このテスト) function 実行は非常に便利です。テストしたい関数に console.trace を追加するだけです。
9 console.assert(value[, message][, ...])
は式か変数かを判断するために使用されます。 true は 2 つのパラメータを受け入れます。最初のパラメータは式、2 番目のパラメータは文字列です。 最初のパラメータが false の場合のみ、2 番目のパラメータが出力されます。それ以外の場合、結果はありません。

console.log(): 文字を標準出力ストリームに出力し、改行で終わります。

console.log にはいくつかのメッセージが記録されます パラメータの場合、パラメータが 1 つしかない場合、このパラメータの文字列形式が出力されます。 パラメータが複数ある場合は、 C言語のprintf()コマンドと同様の形式で出力します。

最初のパラメータは文字列です(存在しない場合)。 パラメータを使用するには、改行を出力するだけです。

console.log('Hello world'); 
console.log('byvoid%diovyb'); 
console.log('byvoid%diovyb', 1991); 

操作の結果は、:

Hello world 
byvoid%diovyb 
byvoid1991iovyb 
  • console.error(): console.log() と同じ使用法ですが、標準エラー ストリームに出力するだけです。
  • console.trace(): 現在のコールスタックを標準エラーストリームに出力します。
console.trace();

操作の結果は:

Trace: 
at Object.<anonymous> (/home/byvoid/consoletrace.js:1:71) 
at Module._compile (module.js:441:26) 
at Object..js (module.js:459:10) 
at Module.load (module.js:348:31) 
at Function._load (module.js:308:12) 
at Array.0 (module.js:479:10) 
at EventEmitter._tickCallback (node.js:192:40)

ファイル main.js を作成します。コードは次のとおりです。

console.info("プログラムの実行が開始されます: ");

var counter = 10;
console.log("カウント: %d", counter);

console.time("データの取得");
//
// 何らかのコードを実行する
//
console.timeEnd('データを取得');

console.info("プログラムは終了しました。")

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js
プログラムの実行が開始されます。
カウント: 10
データ取得:0ms
プログラムが実行されます

process

process はグローバル変数であり、グローバル オブジェクトのプロパティです。

これは、現在の Node.js プロセス状態のオブジェクトを記述するために使用され、オペレーティング システムとの単純なインターフェイスを提供します。 通常、ネイティブ コマンドライン プログラムを作成する場合は、これに対処する必要があります。 プロセス オブジェクトの最も一般的に使用されるメンバー メソッドのいくつかを以下に紹介します。

番号 イベントと説明
1 exit
プロセスが終了しようとしているときに発行されます。
2 beforeExit
このイベントは、ノードがイベント ループをクリアし、他に何もスケジュールされていないときに発生します。 通常、スケジュールされたプロセスがなくなるとノードは終了しますが、「beforeExit」リスナーを非同期で呼び出すことができるため、ノードは実行を継続できます。
3 uncaughtException
このイベントは、例外がイベント ループに戻ったときに発生します。 モニターが例外に追加された場合、デフォルトのアクション (スタック トレースを出力して終了) は発生しません。
4 シグナル イベント
プロセスがシグナルを受信するとトリガーされます。 シグナルのリストについては、SIGINT、SIGUSR1 などの標準 POSIX シグナル名を参照してください。

ファイル main.js を作成します。コードは次のとおりです。

process.on('exit', function(code) {

   // 次のコードは決して実行されません
   setTimeout(function() {
     console.log("このコードは実行されません");
   }, 0);
  
   console.log('終了コードは次のとおりです:', code);
});
console.log("プログラムの実行が終了しました");

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js
プログラム実行の終了
終了コードは: 0

終了ステータスコード

終了ステータス コードは次のとおりです。

ステータス コード 名前と説明
1 キャッチされない致命的な例外
キャッチされない例外がありましたが、ドメインまたは uncaughtException ハンドラによって処理されませんでした。
2 未使用
予約済み、組み込みの悪用のために Bash によって予約されています
3 内部 JavaScript 解析エラー
ノード プロセスの開始時に、JavaScript ソース コードにより解析エラーが発生しました。 非常にまれですが、Node を開発する場合にのみ発生します。
4 内部 JavaScript 評価エラー
JavaScript ソース コードはノード プロセスを開始し、評価中に関数エラーを返します。 非常にまれですが、Node を開発する場合にのみ発生します。
5 致命的エラー
V8 の回復不可能な致命的エラー。 通常は次のような内容を標準エラー出力に出力します: FATAL ERROR
6 非関数内部例外ハンドラ
キャッチされない例外。内部例外処理関数は何らかの理由で関数上に設定されているため、処理できません。と呼ばれます。
7 内部例外ハンドラーの実行時エラー
例外がキャッチされず、例外ハンドラーはその処理中に例外をスローします。 たとえば、process.on('uncaughtException') またはdomain.on('error') が例外をスローした場合です。
8 未使用
予約済み。以前のバージョンの Node.js では、終了コード 8 がキャッチされない例外を示す場合がありました。
9 無効な引数
不明なパラメータが指定されているか、指定されたパラメータに値がない可能性があります。
10 内部 JavaScript 実行時エラー
ノード プロセスの開始時に JavaScript ソース コードがエラーをスローします。これは非常にまれであり、のみ発生します。ノードを開発するときのみ存在します。
12 無効なデバッグ引数
引数 --debug および/または --debug-brk が設定されましたが、間違ったポートが選択されました。
128 シグナル終了
ノードが SIGKILL や SIGHUP などの致命的なシグナルを受信した場合、終了コードは 128 にシグナル コードを加えたものになります。 これは標準的な Unix の慣行であり、終了コードが上位に配置されます。

Processs 属性

Process は、システムの相互作用をより適切に制御するために役立つ多くのプロパティを提供します。

番号。 属性と説明
1 stdout
標準出力ストリーム。
2 stderr
標準エラー ストリーム。
3 stdin
標準入力ストリーム。
4 argv
argv プロパティは、コマンド ラインからスクリプトを実行するときに、さまざまな引数で構成される配列を返します。 最初のメンバーは常にノード、2 番目のメンバーはスクリプト ファイル名、残りのメンバーはスクリプト ファイルのパラメーターです。
5 execPath
現在のスクリプトを実行するノード バイナリへの絶対パスを返します。
6 execArgv
コマンドの下でスクリプトが実行されるときに、Node 実行可能ファイルとスクリプト ファイルの間のコマンドをメンバーとする配列を返します。ラインラインパラメータ。
7 env
メンバーが現在のシェルの環境変数であるオブジェクトを返します
8 exitCode
プロセスが終了するときのコード。プロセスが process.exit() を通じて終了する場合、終了コードを指定する必要はありません。 。
9 バージョン
ノードのバージョン (v0.10.18 など)。
10 バージョン
ノードのバージョンと依存関係を含むプロパティ。
11 config
現在のノードの実行可能ファイルをコンパイルするために使用される JavaScript 設定オプションを含むオブジェクト。 これは、./configure スクリプトを実行して生成される「config.gypi」ファイルと同じです。
12 pid
現在のプロセスのプロセス番号。
13 title
プロセス名、デフォルト値は「node」ですが、この値はカスタマイズできます。
14 arch
現在の CPU のアーキテクチャ: 'arm'、'ia32' または 'x64'。
15 プラットフォーム
プログラムが実行されているプラ​​ットフォーム システムは、「darwin」、「freebsd」、「linux」、「sunos」、または'win32'
16 mainModule
require.main の代替。 違いは、実行時にメイン モジュールが変更された場合、require.main は古いモジュールを返し続ける可能性があることです。 両方とも同じモジュールを参照していると想定できます。

ファイル main.js を作成します。コードは次のとおりです。

// ターミナルに出力
process.stdout.write("Hello World!" + "\n");

// パラメータから読み取る
process.argv.forEach(function(val, index, array) {
     console.log(index + ': ' + val);
});

// 実行パスを取得する
console.log(process.execPath);


// プラットフォーム情報
console.log(process.platform);

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js
Hello World!
0: node
1: /web/www/node/main.js
/usr/local/node/0.10.36/bin/node
darwin

メソッドリファレンスマニュアル

Process は、システムの相互作用をより適切に制御するための多くの便利なメソッドを提供します。

番号 メソッドと説明
1 abort()
これにより、ノードが中止イベントを発生させます。 ノードが終了し、コア ファイルが生成されます。
2 chdir(ディレクトリ)
現在作業中のプロセスのディレクトリを変更し、操作が失敗した場合は例外をスローします。
3 cwd()
現在のプロセスの作業ディレクトリを返します
4 exit([code])
指定されたコードで処理を終了します。 省略した場合はコード0が使用されます。
5 getgid()
プロセスのグループ ID を取得します (getgid(2) を参照)。 取得するのはグループの名前ではなく、数値 ID です。
注: この関数は、POSIX プラットフォームでのみ使用できます (Windows や Android では使用できません)。
6 setgid(id)
プロセスのグループ ID を設定します (setgid(2) を参照)。 数値 ID またはグループ名を受け入れることができます。 グループ名が指定されている場合、数値 ID に解決されるまでブロックされます。
注: この関数は、POSIX プラットフォームでのみ使用できます (Windows や Android では使用できません)。
7 getuid()
プロセスのユーザー ID を取得します (getuid(2) を参照)。 これはユーザー名ではなく、数値のユーザー ID です。
注: この関数は、POSIX プラットフォームでのみ使用できます (Windows や Android では使用できません)。
8 setuid(id)
プロセスのユーザー ID を設定します (setuid(2) を参照)。 数値 ID または文字列名を受け入れます。 グループ名が指定されている場合、数値 ID に解決されるまでブロックされます。
注: この関数は、POSIX プラットフォームでのみ使用できます (Windows や Android では使用できません)。
9 getgroups()
プロセスのグループ ID の配列を返します。 POSIX システムは必ず存在することを保証しませんが、node.js はそれを保証します。
注: この関数は、POSIX プラットフォームでのみ使用できます (Windows や Android では使用できません)。
10 setgroups(groups)
プロセスのグループ ID を設定します。 これは許可された操作であるため、root 権限、または CAP_SETGID 機能が必要です。
注: この関数は、POSIX プラットフォームでのみ使用できます (Windows や Android では使用できません)。
11 initgroups(user, extra_group)
/etc/group を読み取り、メンバーが属するすべてのグループを使用してグループ アクセス リストを初期化します。グループに。 これは許可された操作であるため、root 権限、または CAP_SETGID 機能が必要です。
注: この関数は、POSIX プラットフォームでのみ使用できます (Windows や Android では使用できません)。
12 kill(pid[, signal])
プロセスにシグナルを送信します。pid はプロセス ID で、シグナルはプロセスの文字です。シグナル送信文字列の説明。 シグナル名は、「SIGINT」や「SIGHUP」などの文字列です。 省略した場合、シグナルは「SIGTERM」になります。
13 memoryUsage()
ノード プロセスによって使用されるメモリをバイト単位で記述するオブジェクトを返します。
14 nextTick(callback)
現在のイベント ループが終了すると呼び出されるコールバック関数。
15 umask([mask])
プロセス ファイル マスクを設定または読み取ります。 子プロセスは親プロセスからマスクを継承します。 マスクパラメータが有効な場合は、古いマスクを返します。 それ以外の場合は、現在のマスクを返します。
16 uptime()
ノードが実行されている秒数を返します。
17 hrtime()
現在のプロセスの高解像度時間を [秒, ナノ秒] 配列の形式で返します。 それは過去の任意の出来事に関連しています。 この値は日付に依存しないため、クロック ドリフトの影響を受けません。 主な目的は、正確な時間間隔を通じてプログラムのパフォーマンスを測定することです。
前の結果を現在の process.hrtime() に渡すと、2 つの間の時間差が返され、ベンチマークと時間間隔の測定に使用されます。

ファイル main.js を作成します。コードは次のとおりです。

// 現在のディレクトリを出力します
console.log('現在のディレクトリ: ' + process.cwd());

// 現在のバージョンを出力します
console.log('現在のバージョン: ' + process.version);

// メモリ使用量を出力します
console.log(process.memoryUsage());

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js
現在のディレクトリ: /web/com/runoob/nodejs
現在のバージョン: v0.10.36
{ rss: 12541952, heapTotal: 4083456, heapUsed: 2157056 }