ノードjsのグローバル変数。 Nodejs の基本。 メソッドリファレンスガイド

NODE.JS– jsを実行するためのソフトウェアツール。

Nodejs = V8 + I/O + ライブラリ

V8: 高速、最新、経済的

利点

  • JavaScript
  • クライアントとサーバーの共通コード
  • 基本的な Web タスク
  • 同時に多くの接続とタスクを実行
  • 実用的なプロトタイプを簡単に作成できる
  • 便利なnpmパッケージマネージャー
  • コミュニティ

インストール

インストール時に、nodejs はそれ自体を PATH 変数 (+ npm)、[管理 - 環境変数] に書き込みます。 コマンドラインで確認できます:
パスを設定する

原則として、ファイルはnodejsで起動されます。簡単なスクリプトを作成し、コマンドライン経由で実行してみましょう。


スクリプトが実行され、結果がコマンド ラインに表示されます。

Nodejs ドキュメント

ノードjsモジュール

組み込みの nodejs モジュールがどのように機能するかを理解するには、nodejs Web サイトからソース コード アーカイブ (ソース コード) をダウンロードする必要があります。 そして、lib ディレクトリに移動します。 (dir コマンド - コマンドライン経由でファイルのリストを取得します。すべてのサブフォルダー内のファイルをリストする必要がある場合は、「dir」の代わりに「dir /s」を使用します)。 パッケージから Nodejs をインストールした場合、lib フォルダーにはファイルが見つかりません。

Nodejs にはさまざまなレベルのモジュールがあります。 安定性。 (たとえば、0 – 使用すべきではありません。1、2 – 使用できますが、モジュール API は変更される可能性があります)。

関数は成長しており (プロジェクトは開発中)、時間の経過とともに USER コンストラクター関数を別のファイルに移動する必要があります。 ここでモジュールが活躍します。

モジュールは、nodejs がプロジェクトを編成するために提供する一種の方法です。

プロジェクトは成長する傾向があるため、プロジェクトを複数のファイルに分割する必要があります。ここでモジュールが活躍します。

必要とする

HTML ページの場合、スクリプトを含めるために script タグが使用されます。 Nodejs には特別な require コマンドがあります。

var user = require("./user");

この例では、同じディレクトリ内のファイル (user.js) にアクセスします (拡張子 (.js) はオプションです)。

//require("./user"); // .js を指定する必要はありません // この場合、ファイルは実行されますが、USER 変数はありません // これが、nodejs のスクリプト タグとの主な違いです // node.js では、関数と変数が各モジュールは // このファイル (モジュール自体) に対してグローバルであり、 // 接続時に自動的には使用可能になりません (require("./user")) // しかし、アクセスするにはどうすればよいでしょうか? // 各モジュールには特別な変数があります。exports - これはオブジェクトであり、 // そこに置いたものが結果として返されます require var user = require("./user.js"); // 結果: ユーザー = ( ユーザー: 関数 )

Nodejs モジュラー システムとブラウザ スクリプトの最初の違い: ブラウザに 2 つのスクリプト タグがある場合、そのうちの 1 つでグローバル レベルで定義されている関数は、もう 1 つでは使用できますが、nodejs では使用できません。 nodejs では、関数と変数は特定のファイルに対してグローバルです (必要な場合には使用できません)。 したがって、nodejs を使用すると、真に独立したモジュールを作成できます。 ただし、モジュールを利用できるようにするには、それが使用されます 輸出システム。 各モジュールには特別なエクスポート変数があります。

モジュールディレクトリのDIR/インデックス

フォルダーを直接接続します var user = require("./user"); これには、対応する Index.js が含まれます。

例えば

Function User(name)( this.name = name; ) User.prototype.hello = function(who)( console.log(phrases.Hello + ", " + who.name); ); エクスポート.ユーザー = ユーザー;

ファイル ./server.js 内の User コンストラクターに接続して使用します。

//server.js var user = require("./user"); var vasya = 新しいユーザー.User("Vasya");

「./」 - 現在のフォルダーを基準とした相対パス

exports はオブジェクトであり、そこに配置されたものは require (exports.jpg) の結果として返されます。 このようにして、モジュールはプライベート変数/関数を宣言し、必要なものだけをエクスポートできます。


グローバル変数などの場合 グローバルオブジェクトがあります

Global.User = ユーザー;

結論

  • 接続が必要です
  • 変数: var (モジュールのプライベート)、exports、global (ほとんど使用されません)
  • モジュールの種類: js、node (.node 拡張子付き)、json (.json 拡張子付き)。 Json モジュールは、ファイルに単純な情報を保存する必要がある場合に使用されます。
  • モジュールディレクトリのDIR/インデックス

モジュールオブジェクト

  • モジュールオブジェクト
  • モジュール関数 module.exports = 関数
  • モジュールのキャッシュ (モジュールは再度読み取られることはありません)
  • モジュールの配置: 検索順序
  • パラメータの受け渡し: module-factory

モジュールオブジェクト(モジュールの基本オブジェクト)は、各モジュール内に存在する変数です(ファイル、console.log(module;);が出力できます)。 。 内容: id プロパティ – 通常はファイルへのパス、
parent – 親モジュールへのリンク (module.parent – これを必要とする親モジュールへのリンク)、
子 (module.children - require を介して接続されているモジュール)、
財産などを輸出します。

モジュールまたはアプリケーション? モジュール.親

モジュールは直接起動できますが、起動できない場合、機能が別のモジュールに接続されている場合は、この機能をエクスポートさせます。 これら 2 つのケースは、以下をチェックすることで区別できます。

If(module.parent) (exports.run = run; ) else ( run(); )


ps: stackoverflow.com で言われているように、親は解釈のためにスクリプトを呼び出したモジュールです

// $ ノード foo.js console.log(module.parent); // null // require("./foo") console.log(module.parent); // ( ... )

module.exports の適切な使用

モジュールのコンテキストでは:

module.exports = exports = this (これらの構造は同等です)

関数をオブジェクト内ではなく直接渡す場合は、次の構文を使用します。

Module.exports = ユーザー;


モジュールのキャッシュ

Nodejs がモジュールをロードすると、対応するモジュール オブジェクトが完全に作成され (parent 、exports およびその他の同様のプロパティを考慮して)、それ自体が記憶されます (module.id (ファイルへの完全パス) は内部キャッシュの識別子として機能します) ) そして、次に任意のモジュール (ファイル) に再度アクセス (接続) するときに、nodejs はキャッシュから同じオブジェクトを取得します。 つまり、たとえば、ファイル内でモジュールを 1 回初期化するだけで十分であり、将来はそのモジュールを簡単に使用できます。

この例では、 var db = require("../db"); となります。
var db = require("./db"); の場合 同じオブジェクトが取得されます。 したがって、原則は次のとおりです。モジュールは初めて使用されるときに初期化され、今後は接続して使用するだけです (つまり、この場合、db.connect() を 2 回使用する必要はありません。つまり、別のファイルにあります)。


モジュールの配置:nodejs 内でモジュールが見つかる順序

特定のパスを指定せずにデータベースを常に接続する方法:

Var db = require("../db"); //または var db = require("./db");

そしてこのように:

変数 db = require("db");

db が接続されているファイルには関係ありません。

これを行うには、nodejs でのモジュールの検索順序 (require が呼び出されたときに何が起こるか) を理解する必要があります。 nodejs には、require("fs"); などの組み込みモジュールが多数あります。 , 問題なく接続されます。 require に特定のパスを指定する場合、たとえば、require("../db"); 、指定されたパスに基づいて検索が行われ、ファイルが見つかるか、nodejs がこのファイルをディレクトリとして取得しようとします (そして、カテゴリ内でindex.js を探します)。

require("db"); を指定した場合 モジュールが組み込まれていない場合、node_modules ディレクトリが現在の位置を基準にして検索されます (見つかった場合は、そこからモジュールを取得しようとします)。 node_modules ディレクトリが見つからない場合は、上記のように、node_modules ディレクトリが検索されます。

モジュールの特定のパスを指定するだけでなく、nodejs は次のようにモジュールを検索できます。

npm の概要 - Node.JS のパッケージ マネージャー

  1. モジュールに関する情報 (名前、バージョンなど) を含むパッケージ説明ファイル (package.json) を作成します。 手動またはコマンド経由
    npm初期化
    (必要な情報をお聞きします)
  2. モジュールを公開するには、次のことを行う必要があります。
    1. npm adduser コマンドを使用してユーザーを追加します (ユーザー名とパスワードを入力する必要があります)。 これで、npm でのすべての作業がこのユーザーに代わって行われるようになります。 ユーザーは https://www.npmjs.com/~name_user にログインしてモジュールを監視できます。
    2. パブリッシング: npm パブリッシュ
  3. その後、データベースに追加されたモジュールを誰かが使用できるようになり、ユーザー自身が変更を加えることができます。
  4. npm help コマンドを使用してすべての npm コマンドを取得する
  5. データベース内のモジュールを検索します: npm s キーワードまたは npm 検索キーワード (例: npm s super module)
  6. モジュールをインストールします: npm install name_module または npm i name_module
  7. モジュールをインストールするとき、nodejs はまず現在のディレクトリで node_modules フォルダーを検索します (その後、さらに上位に移動するなど)。または (node_modules が見つからない場合は) package.json (これも上に進みます。通常、package.json はルートを示します) を検索します。プロジェクト)、それに応じて、package.json が見つかると、対応するディレクトリに node_modules フォルダーが作成されます。 両方のオプションが失敗した場合、nodejs は現在のディレクトリに node_modules フォルダーを作成します。 モジュールを特定のディレクトリに配置する場合は、そのディレクトリに node_modules フォルダーを作成する必要があります。
  8. npm up update module (node_modules フォルダー内にある更新モジュールをチェックします)
  9. npm delete modulename (モジュールの削除)

npm からの出力:

npm初期化
nmp 追加ユーザー
npm公開
npmの検索キーワード
npmインストールモジュール
npm更新モジュール
npm 削除モジュール
npmヘルプコマンド

NPM パッケージの構造

必要なバージョンのインストール (例: npm i) [メールで保護されています]

モジュールが git バージョニング システム (github など) を使用して開発されている場合、モジュールの最新バージョンを入手できます。 Git Read-Only (URL): https://github.com/strongloop/express.git を取得し、コンソールで次のようにするだけで十分です。

npm i https://github.com/strongloop/express.git

package.jsonの依存関係

dependency は、これが依存するモジュールを指します。

開発依存関係

devDependency に登録されているモジュールは、モジュールが依存関係としてプルされた場合にはインストールされません。 これらは開発目的でのみインストールされ、たとえば、node_modules フォルダー内のモジュールに移動して「npm i」と入力すると (または npm config フラグを設定すると) インストールできます。

メインフィールドはパッケージへのエントリポイントを指定します

グローバルモジュール

-g フラグを設定すると、任意のモジュールをグローバルにインストールできます: npm -g module

グローバルとは、システム ディレクトリに対する意味です。

Windows のグローバル モジュールのディレクトリ:

C:\users\ユーザー名\AppData\Roaming\npm

グローバル モジュールは標準のシステム ディレクトリに配置されます。 package.json にあるバイナリはシステム パスにインストールされます (これがグローバル モジュールの主な用途です)。つまり、将来的にはコンソールから呼び出すことができるようになります。

I.Kantor のコースの資料に基づく

皆さん、今日の記事では、Node のグローバル変数について話したいと思います。この記事は、Node を使用する初級から中級のスキル レベルの開発者を対象としています。グローバル変数について聞いたことがない、またはグローバル変数を使用したことがない場合は、いいえこの記事を読めば、グローバル変数について知っておくべきすべてのことがすぐにわかり、すぐに使い始めることができます。

グローバル変数とは何ですか?

グローバル変数は、通常の変数と同一ではないにしても、非常に似ています。 グローバル変数は、値を使用して初期化したり、その値を変更したり、通常の変数と同様にクリアしたりすることもできます。 通常の変数とグローバル変数の違いは、そのスコープにあります。 JavaScript ファイル内に変数を作成すると、その変数は宣言されたスコープ内にのみ存在します。 さて、これはどういう意味でしょうか? 以下のコードでは、スコープが異なる 2 つの異なる変数の例を確認できます。

// Scope.js let fileScope = "ファイル内のどこからでもアクセス可能"; function doSomething() ( let localScope = "この関数内でのみアクセスできます"; fileScope = "関数内でもアクセスできます!"; ) // 変数が外部に存在しないため、エラーが発生します。関数。 localScope = "ここで私を変えてみてください";

上記のコード スニペットでは、 fileScope と localScope という 2 つの変数があることがわかります。 変数 fileScope はこのファイル内のどこからでも変更したり呼び出すことができますが、 localScope 変数は関数 doSomething() 内にのみ存在します。 この時点で、これがグローバル変数とどのような関係があるのか​​疑問に思っていると思います。グローバル変数について話すとき、グローバル変数はプログラム内のすべてのファイルに存在します。つまり、プログラムのグローバル スコープを持つことを意味します。

これが可能な理由は、JavaScript プログラムがプログラム内のすべてのファイル間でグローバル名前空間を共有しているためです。 別の言い方をすると、プログラムが他のすべての JavaScript ファイルを「インポート」した巨大なファイルまたはコンテナーであると想像してください。 次に、この大きなコンテナ ファイルで変数を宣言すると、その変数のスコープはプログラム全体に渡ります。 ネームスペースが何かわからない場合、またはネームスペースについて詳しく知りたい場合は、この記事を参照して詳細を確認してください。

グローバル変数を宣言して使用する方法

Node のグローバル変数が何であるかをよりよく理解できたので、実際にグローバル変数を設定して使用する方法について説明します。グローバル変数を設定するには、グローバル オブジェクト上にグローバル変数を作成する必要があります。グローバル オブジェクトは、変数が作成されたファイル (モジュール) だけではなく、プロジェクト全体のスコープを提供します。以下のコード ブロックでは、globalString というグローバル変数を作成し、それに値を与えます。 globalString の値を変更し、最後に unknown に設定します。

// Global.js global.globalString = "これはどこからでもアクセスできます!"; console.log(globalString); // 出力: 「これはどこからでもアクセスできます!」 globalString = "今すぐチェックしてください"; console.log(globalString); // 出力: 「今すぐチェックしてください」 globalString = unknown; console.log(globalString); // 出力: 未定義 // Example.js // Global.js で作成したグローバルを、 // このファイルでも使用できます。 console.log(globalString); // 出力: unknown globalString = “私たちも変更できます!”; console.log(globalString); // 出力: “私たちも変更できます!”

まだ説明していないのは、変数をグローバルにする別の方法です。 これを除外した理由は、変数を設定する適切な方法ではないためです。 キーワード var を使用せずにファイル内で変数を宣言し、それに値を割り当てると、グローバル オブジェクトはこの変数のプロパティを設定します。 このプロセスは基本的に、グローバルにアクセス可能な変数に変換します。 ただし、この方法はグローバルを作成する適切な方法ではないため、使用しないことを強くお勧めします。 「use strict」ディレクティブを設定すると、Node は暗黙的なグローバルを無効にし、実行時にスクリプトが機能せずにエラーが発生する可能性があることに注意することも重要です。

グローバル変数の実際の使用例

さて、グローバル変数について詳しく理解したので、グローバル変数を作成してみようと考えているかもしれません。 いくつかの非常に重要な理由から、グローバル変数を作成しないように強く警告します。

1 つ目の理由は、グローバル変数を作成すると、それがアプリケーションの存続期間中ずっと存在するためです。 変数がアプリの存続期間中存続するということは、アプリの実行中にその変数がメモリ内に存在し、リソースを占有していることを意味します。

第 2 に、従来のようにグローバル変数を使用すると、同時実行の問題が発生する可能性があります。 複数のスレッドが同じ変数にアクセスでき、アクセス修飾子やフェイルセーフが設定されていない場合、2 つのスレッドが同じ変数にアクセスして使用しようとするという重大な問題が発生する可能性があります。 しかし、これは他の言語に当てはまりますが、Node.js は厳密にシングルスレッド環境であるため、必ずしも当てはまるわけではありません。 それと同時に ノード プロセスをクラスタ化することは可能ですが、ノード プロセス間で通信するネイティブな方法はありません。

最後に説明する理由は、グローバルを使用すると、ファイルまたは変数間の暗黙的な結合が発生する可能性があるということです。 優れたコードを作成する場合、結合は良いことではありません。 コードを記述するときは、コードが可能な限りモジュール化されて再利用可能であると同時に、使いやすく理解しやすいものであることを確認したいと考えています。 コードの一部を結合すると、何かが機能しない理由をデバッグしようとしているときに、将来的に大きな問題が発生する可能性があります。

グローバル変数が推奨されない理由について詳しく知りたい場合は、「グローバル変数は悪い」という素晴らしい記事を参照してください。

グローバル変数の目的について混乱を感じても、心配する必要はありません。 Node に組み込まれているいくつかのグローバル変数を見て、それらがグローバルである理由とその使用方法について理解を深めていきます。 実際、あなたはおそらく、それらがグローバル オブジェクトであることに気付かずに、すでにそれらのいくつかを使用したことがあるでしょう。

// ノード グローバル console.log("Hello World!"); プロセス.env.PORT = 3000; setInterval(( console.log("2 秒が経過しました。"); 2000);

上記のコード ブロックを見ると、以前に使用したインスタンスが少なくとも 1 つある console.log() が見つかるでしょう。 Node のドキュメントによると、コンソール オブジェクトは、開発者がログやエラーの出力などを実行できるようにするいくつかのメソッドを持つグローバルです。 ドキュメントを詳しく調べると、コンソールは実際には process.stdout および process.stderr に書き込むように構成されたグローバル インスタンスであることがわかります。

これにより、上記のコード ブロックにある次のステートメントである process オブジェクトが表示されます。 Node アプリケーションの実稼働ビルドを作成した場合は、環境変数のポートを設定する必要があった可能性があります。 環境変数 env は、別のグローバルであるプロセス オブジェクトの一部です。 プロセス オブジェクトの変数はグローバルであるため、プロジェクト内のどのファイルでもアクセスできます。 このオブジェクトがグローバルでない場合、コンソール オブジェクトはどのファイルからもアクセスできなくなります。コンソール オブジェクトは実際にはプロセス オブジェクトを参照するオブジェクトであることを思い出してください。

setInterval は、操作を実行する前に遅延させる理由がある場合に、以前に目にしたことがあるかもしれないもう 1 つの関数です。 setTimeout と setImmediate は本質的に setInterval に似ており、両方ともグローバル関数でもあります。 これら 3 つの関数は、ファイル内で明示的にタイマーを必要とせずにこれらの関数を呼び出すことができるグローバル API を公開するタイマー モジュールの一部です。

上記の使用例はすべて Node に組み込まれており、理由があってグローバルです。 プロセス オブジェクトは、現在実行中のノード プロセスに関する情報を提供するためグローバルであり、そのため、必要とせずにどのファイルからも利用できる必要があります。 同じことがタイマー モジュールにも言えます。タイマー モジュールには重要な機能が多数含まれており、必要なくどこからでもアクセスできる必要があります。 Node に組み込まれている既存のグローバル オブジェクトについて詳しく知りたい場合は、グローバルに関する公式ドキュメントを参照することをお勧めします。

もっと詳しく知る

Node.js の基礎についてさらに詳しく知りたいですか? 個人的には、「Wes Bos」のような「Node.js を学ぶ」オンライン コースをお勧めします。ビデオの方がはるかにわかりやすく、実際に実際のアプリケーションを構築できるからです。

結論

かなりの量の情報だったと思いますが、最後までお付き合いいただきありがとうございました。 上記の情報はすべて Node の Web サイトのドキュメントに記載されています。お気軽に下記のコメント セクションで質問やコメントをお寄せください。次回まで皆さん!

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

通常、JavaScript ブラウザはグローバル ウィンドウ オブジェクトであり、Node.js グローバル オブジェクトはグローバル オブジェクトであり、すべてのグローバル変数 (グローバル self を除く) はグローバル オブジェクトによって所有されます。

Node.js では、アプリケーションにグローバル プロパティを含めなくても、グローバル プロパティに直接アクセスできます。

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

最も基本的なグローバルの役割は、グローバル ホスト変数としての役割です。 ECMAScript の定義により、次の条件はグローバル変数です。

  • 変数 外部が定義されています。
  • グローバルオブジェクトのプロパティ。
  • 変数は暗黙的に定義されます (未定義の変数への直接代入)。

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

注記:グローバル変数の導入を避けるために、常に var を使用して変数を定義してください。グローバル変数は名前空間を汚染し、通信コードのリスクが増大するためです。

__ファイル名

__filename は、現在実行中のスクリプトのファイル名を指定します。出力ファイルの場所への絶対パスですが、コマンド ライン オプションと指定するファイル名は必ずしも同じである必要はありません。 モジュール内の場合、戻り値はモジュールのファイルへのパスです。

// 出力全局变量 __filename 的值 console.log(__filename);

$ ノード main.js /web/com/w3big/nodejs/main.js

__ディレクトリ名

__dirname は、現在配置されているスクリプト ディレクトリを表します。

main.js ファイルを作成し、次のようなコードを作成します。

// 出力全局变量 __dirname 的值 console.log(__dirname);

main.js 実行可能ファイルのコードは次のようになります。

$ ノード main.js /web/com/w3big/nodejs

setTimeout(CB, ミリ秒)

setTimeout(C - バイさん)注: SetTimeout() 関数は 1 回だけ指定されます。

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

main.js ファイルを作成し、次のようなコードを作成します。

Function printHello())( console.log("Hello, World!"); ) // setTimeout(printHello, 2000);

main.js 実行可能ファイルのコードは次のようになります。

$ node main.js Hello, World!

クリアタイムアウト(t)

setTimeout() を渡してタイマーを作成する前に、clearTimeout(t) を使用してグローバル関数を停止します。パラメータ T 関数 setTimeout() を使用して計算機を作成します。

main.js ファイルを作成し、次のようなコードを作成します。

Function printHello())( console.log("Hello, World!"); ) // var t = setTimeout(printHello, 2000); // 消去タイマーclearTimeout(t);

main.js 実行可能ファイルのコードは次のようになります。

$nodemain.js

setInterval(CB, ミリ秒)

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

タイマーを表すハンドルの値を返します。 機能を使用できます clearInterval(T) はタイマーをクリアします。

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

main.js ファイルを作成し、次のようなコードを作成します。

Function printHello())( console.log("Hello, World!"); ) // setInterval(printHello, 2000);

main.js 実行可能ファイルのコードは次のようになります。

$ node main.js Hello, World! こんにちは世界! こんにちは世界! こんにちは世界! こんにちは世界! ……

上記のプログラムは、2秒に1回「Hello, World!」を出力し、ボタンが押されるまで実行され続けます。 CTRL + C.

コンソール

コンソール 標準出力を提供するコンソール。これは Internet Explorer の JScript エンジンによって提供されるデバッグ機能であり、後に事実上のブラウザ標準になりました。

Node.js はこの標準に従い、標準出力ストリーム (STDOUT) または標準エラー ストリーム (STDERR) の出力文字で使用されるコンソール オブジェクトの一貫した動作と習慣を保証します。

コンソールメソッド

以下はコンソール オブジェクトです。

いいえ。方法と説明
1 console.log([データ] [, ... ])
標準の印刷可能な出力ストリーム文字の場合は、改行文字で終わります。 このメソッドは複数のパラメータを受け入れますが、パラメータが 1 つしかない場合、出力はこのパラメータの文字列になります。 引数が複数ある場合はC E()にコマンドの出力形式などを記述します。
2 console.info([データ] [, ... ])
コマンドの P ロールは情報メッセージを返します。console.log コマンドは、Chrome に加えて大きな違いはありません。テキストのみが出力され、残りは青い感嘆符が表示されます。
3 console.error([データ] [, ... ])
エラーメッセージを出力します。 フォークエラーが発生すると、コンソールは赤色で表示されます。
4 console.warn([データ] [, ... ])
警告メッセージが表示されます。 コンソールには黄色の感嘆符が表示されます。
5 console.dir(OBJ[, オプション])
検査(検査)に使用するオブジェクトと見やすい表示・印刷形式。
6 console.time (ショートカット)
時間出力、開始時間。
7 console.timeEnd(ショートカット)
終了時刻。時間の終わりを示します。
8 console.trace(メッセージ [, ...])
現在、コードはスタック上に呼び出しパスを実装しています。このテスト関数を実行すると便利です。行上の console.trace によって結合される関数をテストしたいだけです。
9 console.assert(値[, メッセージ][, ...])
変数または式が true かどうかを判断するには、2 つのパラメータが必要でした。最初のパラメータは式で、2 番目の引数は文字列です。 最初の引数が false の場合のみ、出力は 2 番目の引数となり、結果はありません。
console.log(): 標準出力に出力し、改行で終わります。

console.log は複数のパラメータを受け入れます。パラメータが 1 つしかない場合は、そのパラメータの出力文字列です。 引数が複数ある場合はC E()にコマンドの出力形式などを記述します。

最初のパラメータは文字列で、パラメータはありません。改行文字のみを出力します。

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

Hello world byvoid%diovyb byvoid1991iovyb

  • console.error(): console.log() を使用すると同じことを行いますが、標準エラーに出力されます。
  • console.trace(): 現在の呼び出しスタックの標準出力にエラーをストリームします。
コンソール.トレース();

経営成績は以下の通り。

トレース: オブジェクトで。 (/home/byvoid/consoletrace.js:1:71) Module._compile (module.js:441:26) で Object..js (module.js:459:10) で Module.load (module.js: 348:31) Function._load (module.js:308:12) で Array.0 (module.js:479:10) で EventEmitter._tickCallback (node.js:192:40)

main.js ファイルを作成し、次のようなコードを作成します。

Console.info("程序开開始行:"); var カウンタ = 10; console.log("计数: %d", counter); console.time("获取データベース"); // // 执行一部代 // console.timeEnd("获取数据"); console.info("プログラム実行完了。")

main.js 実行可能ファイルのコードは次のようになります。

$ node main.js 程序開始実行: 计数: 10 取得データベース: 0ms 程序開始完遂

プロセス

プロセスはグローバル変数であり、属性はグローバル オブジェクトです。

これは、Node.js オブジェクトの現在のプロセス状態を記述するために使用され、オペレーティング システムにシンプルなインターフェイスを提供します。 通常、独自のコマンド ライン プログラムを作成し、最終的にはそれを処理することになります。 以下に、メンバーによる異議申し立てのプロセスで最もよく使用される方法をいくつか紹介します。

いいえ。イベントと説明
1 出口
プロセスを終了する準備ができたときに発生します。
2 終了前
このイベントは、ノードに空のイベント ループがあり、他のアクションが実行されない場合に発生します。 一般に、終了ノードを編成するプロセスはありませんが、「beforeExit」リスナーを非同期で呼び出すことができるため、ノードは続行されます。
3 捕捉されなかった例外
例外がイベント ループに戻されると、このイベントが発生します。 例外にモニターを追加すると、デフォルトのアクション (スタック印刷と終了) は発生しません。
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 未使用
保持
3 JavaScript 内部エラー分析
ソース コードを解析する JavaScript エラーは、ノード プロセスの開始時に呼び出されます。 非常にまれですが、Node の場合のみです。
4 内部JavaScript障害スコア
ソース ノードを実行している JavaScript プロセスは、関数の評価時に失敗を返します。 非常にまれですが、Node の場合のみです。
5 致命的な誤り
V8 で修正不可能なエラーが発生し、致命的な結果が発生しました。 通常は標準エラー出力、内容: 致命的なエラーを出力します
6 非関数内部例外ハンドラー
キャッチされない例外。内部の例外ハンドラーが何らかの理由で関数に設定されており、呼び出すこともできません。
7 内部実行時ハンドラー例外の失敗
例外がキャッチされず、独自の例外ハンドラーが例外をスローします。 たとえば、process.on("uncaughtException") または domain.on("error") が例外をスローした場合です。
8 未使用
保持
9 無効な引数
未知のパラメータまたは値を指定するパラメータである可能性があります。
10 内部 JavaScript ランタイムが失敗しました
JavaScript ソース コードは、Node プロセスでエラーが発生したときに生成されますが、ごくまれに、Node の開発がある場合にのみ生成されます。
12 無効なデバッグ引数
--debug オプション セットおよび/または --debug-BRK が、間違ったポートを選択しました。
> 128 信号出力
ノードが SIGKILL や SIGHUP などの致命的なシグナルを受信した場合、戻りコードは 128 にシグナル コードを加えたものになります。 これは標準的な Unix の慣例であり、出力信号のハイ コードです。

プロセス属性

このプロセスは、システムをより適切に制御できるようにするための多くの便利なプロパティ、対話の容易さを提供します。

数量プロパティと説明
1 標準出力
標準出力ストリーム。
2 標準エラー
標準エラーストリーム。
3 標準入力
標準入力ストリーム。
4 ARGV
ARGV プロパティは、作成時にコマンド ライン スクリプトを実行するためのさまざまなオプションの配列を返します。 その最初のメンバーは常にノードであり、2 番目のメンバーはスクリプト ファイル名、残りのメンバーはスクリプト ファイル パラメーターです。
5 実行パス
現在のスクリプト実行バイナリ ノードの絶対パスを返します。
6 execArgv
スクリプト ファイルのノード実行可能コマンド ライン パラメータの間で実行されたコマンド ライン スクリプトの下にある配列メンバーを返します。
7 環境
現在のシェル環境変数のメンバーであるオブジェクトを返します。
8 終了コード
プロセスの終了コード (終了コードを指定せずに process.exit() exit でプロセスが提示された場合)。
9 バージョン
ノードのバージョン (v0.10.18 など)。
10 バージョン
ノードと依存関係のバージョンを含むプロパティ。
11 構成
現在のノードを含むオブジェクトは、実行可能な JavaScript オプション構成ファイルをコンパイルするために使用されます。 これは、「config.gypi」ファイルによって作成されたものと同じ run./configure スクリプトです。
12 PID - レギュレーター
現在のプロセス番号。
13 名前
プロセス名、デフォルトの「ノード」、値はカスタマイズできます。
14 アーチ
現在の CPU アーキテクチャ: 「arm」、「ia32」、または「64」。
15 プラットホーム
プラットフォームが「Darwin」、「FreeBSD」、「Linux」、「SunOS」または「win32」であるプログラムを実行します。
16 メインモジュール
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: ノード 1: /web/www/node/main.js /usr/local/node/0.10.36/bin/node ダーウィン

メソッドリファレンスガイド

このプロセスでは、対話型システムのより効率的な制御を容易にする多くの便利な方法が提供されます。

いいえ。方法と説明
1 アボート()
これにより、割り込みノード トリガー イベントが発生します。 これにより、ノードが終了し、ダンプ ファイルが作成されます。
2 ChDir (ディレクトリ)
操作を終了できない場合は、プロセスの現在の作業ディレクトリを変更します。
3 耳 ()
現在のプロセスの作業ディレクトリを返します。
4 exit([コード])
指定されたコードでプロセスを終了します。 このパラメータを省略した場合、コード 0 が使用されます。
5 getgid()
プロセス グループ ID を取得します (getgid(2) を参照)。 グループが名前ではなくデジタル ID を購入した場合。
6 セットギッド(ID)
グループ識別プロセスをセットアップします (setgid (2) を参照)。 ID には数値またはグループ名を使用できます。 グループ名を指定すると、デジタル ID を待機してブロックが許可されます。
注: この関数は、POSIX プラットフォーム (Windows 以外および Android 以外) でのみ使用できます。
7 getuid()
ユーザーの識別プロセスを取得します (getuid(2) を参照)。 これは、ユーザー名ではなく、数値のユーザー ID です。
注: この関数は、POSIX プラットフォーム (Windows 以外および Android 以外) でのみ使用できます。
8 UIP (ID)
プロセス設定ユーザー ID (UIP (2) を参照)。 デジタル識別子または名前文字列を取得します。 グループ名を指定すると、デジタル ID を待機してブロックが許可されます。
注: この関数は、POSIX プラットフォーム (Windows 以外および Android 以外) でのみ使用できます。
9 getgroups()
グループID配列を返す処理。 POSIX システムはその存在を保証しませんが、Node.js は存在することが保証されています。
注: この関数は、POSIX プラットフォーム (Windows 以外および Android 以外) でのみ使用できます。
10 セットグループ
プロセスグループIDを設定します。 これは動作する資格があり、必要なのはスーパーユーザー権限を持っているか、CAP_SETGID 機能を持っていることだけです。
注: この関数は、POSIX プラットフォーム (Windows 以外および Android 以外) でのみ使用できます。
11 initgroups(user, extra_group)
読書/など /group を実行し、グループ アクセス リストを初期化すると、グループのすべてのメンバーが検索されます。 これは動作する資格があり、必要なのはスーパーユーザー権限を持っているか、CAP_SETGID 機能を持っていることだけです。
注: この関数は、POSIX プラットフォーム (Windows 以外および Android 以外) でのみ使用できます。
12 kill (IDP [シグナル])
プロセスにシグナルを送信します。 ID はプロセスの識別子で、シグナルは送信されるシグナルを示す文字列です。 シグナル名は、「SIGINT」や「」SIGHUP などの文字列です。 このパラメータを省略した場合、シグナルは「SIGTERM」になります。
13 メモリ使用量()
ノードのメモリ ステータス バイトによって使用されるプロセスを記述するオブジェクトを返します。
14 nextTick(コールバック)
現在の関数コールバック イベント ループが終了した後。
15 Umask ([マスク])
プロセスマスクファイルを設定または読み取ります。 子プロセスは、親プロセスからこのマスクを継承します。 マスク引数が true の場合、古いマスクが返されます。 それ以外の場合は、現在のマスクを返します。
16 過ごした()
ノードがすでに起動している秒数を返します。
17 hrtime()
現在のプロセスの時間解像度。[秒] 配列ナノ秒として指定します。 これは過去のイベントとの相対的なものです。 この値は日付とは関係がないため、時計のずれには影響しません。 主な目的は、プログラムのパフォーマンスを正確な期間にわたって測定することです。
結果が現在の process.hrtime() に渡される前に、基準と時間間隔の測定のためにそれらの間の時間差が返されます。

main.js ファイルを作成し、次のようなコードを作成します。

// 出力当前目录 console.log("当前目录: " + process.cwd()); // 出てくる現在のバージョン console.log("現在のバージョン: " + process.version); // 出内存使用状況 console.log(process.memoryUsage());

ノードでは、「global」または「GLOBAL」オブジェクトを使用してグローバル変数を設定できます。

GLOBAL._ = require("アンダースコア"); // しかし、これは「すべきではありません」! (以下の注を参照)

またはもっと便利です...

GLOBAL.window = GLOBAL; // ブラウザと同様

ノードから、それらが縫い合わされていることがわかります。

Node-v0.6.6/src/node.js:28:global = this; 128: グローバル.GLOBAL = グローバル;

上記のコードでは、「this」がグローバル コンテキストです。 commonJS モジュール (ノードが使用する) では、モジュール内のこの「オブジェクト」(つまり、「コード」) はグローバル コンテキストではありません。 この証拠として、私が「この」オブジェクトを吐き出し、次に巨大な「GLOBAL」オブジェクトを吐き出す以下を参照してください。

Console.log("\nTHIS:"); コンソール.ログ(これ); console.log("\nグローバル:"); コンソール.ログ(グローバル); /* 出力 ... これ: {} グローバル: ( ArrayBuffer: 、Int8Array: ( BYTES_PER_ELEMENT: 1 )、Uint8Array: ( BYTES_PER_ELEMENT: 1 )、Int16Array: ( BYTES_PER_ELEMENT: 2 )、Uint16Array: ( BYTES_PER_ELEMENT: 2 )、Int32Array: ( BYTES_PER_ELEMENT: 4 )、Uint32Array: ( BYTES_PER _ELEMENT: 4 )、Float32Array: ( BYTES_PER_ELEMENT: 4 )、Float64Array: ( BYTES_PER_ELEMENT: 8 )、DataView: 、グローバル: 、プロセス: ( EventEmitter: 、タイトル: "ノード"、アサート: 、バージョン: "v0.6.5"、_tickCallback: 、 moduleLoadList: [ "バインディング evals"、"バインディング ネイティブ"、"NativeModule イベント"、"NativeModule バッファ"、"バインディング バッファ"、"NativeModuleassert"、"NativeModule util"、"NativeModule パス"、"NativeModule モジュール"、" NativeModule fs"、"Binding fs"、"バインディング定数"、"NativeModule ストリーム"、"NativeModule コンソール"、"Binding tty_wrap"、"NativeModule tty"、"NativeModule net"、"NativeModule タイマー"、"Binding timer_wrap"、" NativeModule _linklist" ]、バージョン: ( ノード: "0.6.5"、v8: "3.6.6.11"、ares: "1.7.5-DEV"、uv: "0.6"、openssl: "0.9.8n" )、nextTick : 、stdout: 、arch: "x64"、stderr: 、プラットフォーム: "darwin"、argv: [ "node"、"/workspace/zd/zgap/darwin-js/index.js" ]、stdin: 、env: ( TERM_PROGRAM: "iTerm.app"、"COM_GOOGLE_CHROME_FRAMEWORK_SERVICE_PROCESS/USERS/DDOPSON/LIBRARY/APPLICATION_SUPPORT/GOOGLE/CHROME_SOCKET": "/tmp/launch-nNl1vo/ServiceProcessSocket"、TERM: "xterm"、SHELL: "/bin/bash" 、TMPDIR: "/var/folders/2h/2hQmtmXlFT4yVGtr5DBpdl9LAiQ/-Tmp-/"、Apple_PubSub_Socket_Render: "/tmp/launch-9Ga0PT/Render"、USER: "ddopson"、COMMAND_MODE: "unix2003"、SSH_AUTH_SOCK: "/tmp/ launch -sD905b/Listeners"、__CF_USER_TEXT_ENCODING: "0x12D732E7:0:0"、PATH: "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:~/bin:/usr/ X11 /bin"、​​PWD: "/workspace/zd/zgap/darwin-js"、LANG: "en_US.UTF-8"、ITERM_PROFILE: "デフォルト"、SHLVL: "1"、COLORFGBG: "7;0"、 HOME : "/Users/ddopson"、ITERM_SESSION_ID: "w0t0p0"、LOGNAME: "ddopson"、DISPLAY: "/tmp/launch-l9RQXI/org.x:0"、OLDPWD: "/workspace/zd/zgap/darwin- js /external", _: "./index.js")、openStdin: 、exit: 、pid: 10321、機能: ( debug: false、uv: true、ipv6: true、tls_npn: false、tls_sni: true、tls : true )、kill: 、execPath: "/usr/local/bin/node"、addListener: 、_needTickCallback: 、on: 、removeListener: 、realExit: 、chdir: 、debug: 、error: 、cwd: 、watchFile: 、 umask : 、getuid: 、unwatchFile: 、mixin: 、setuid: 、setgid: 、createChildProcess: 、getgid: 、inherits: 、_kill: 、_byteLength: 、mainModule: ( id: ". "、エクスポート: ()、親: null、ファイル名: "/workspace/zd/zgap/darwin-js/index.js"、ロード: false、終了: false、子: 、パス: )、_debugProcess: 、dlopen: 、稼働時間: 、memoryUsage: 、uvCounters: 、バインディング: )、GLOBAL: 、root: 、バッファ: ( poolSize: 8192、isBuffer: 、byteLength: 、_charsWritten: 8 )、setTimeout: 、setInterval: 、clearTimeout: 、clearInterval: 、コンソール: 、ウィンドウ: 、ナビゲーター: () ) */

**注: 「GLOBAL._」設定に関しては、通常は var _ = require("underscore"); を実行するだけです。 。 はい、Java で import com.foo.bar を実行するのと同じように、アンダースコアを使用するすべてのファイルでこれを実行します。 。 これにより、ファイル間のリンクが「明示的」になるため、コードが何を行っているかを判断しやすくなります。 少し面倒ですが、良いです。 これは説教です。

すべてのルールには例外があります。 「GLOBAL._」を設定する必要があるインスタンスが 1 つだけありました。 私は、ほとんどが JSON ですが、もう少し柔軟性を高めるために「JS で書かれた」「構成」ファイルを定義するシステムを作成していました。 このような構成ファイルには「require」ステートメントはありませんでしたが、アンダースコアにアクセスできるようにしたかったので (システム全体がアンダースコアとアンダースコア パターンに基づいていました)、「config」を評価する前に「GLOBAL._」を設定しました。 はい、すべてのルールには必ずどこかに例外があります。 でも、「入力するのが面倒だから契約を破棄したい」というだけではなく、ちゃんとした理由があるのです。