94

たとえば、カスタムロガーを使用したい:

logger = require('basic-logger'),
logger.setLevel('info')

var customConfig = {
showMillis: true,
showTimestamp: true
}

var log = new logger(customConfig)

console.log の代わりに他のモジュールでこのロガーを使用するには?

4

7 に答える 7

129

ほとんどの人は、グローバル変数を使用しないようにアドバイスしています。異なるモジュールで同じロガークラスが必要な場合は、これを行うことができます

ロガー.js

  module.exports = new logger(customConfig);

foob​​ar.js

  var logger = require('./logger');
  logger('barfoo');

グローバル変数が必要な場合は、次のようにします。

global.logger = new logger(customConfig);
于 2012-06-11T21:07:48.340 に答える
56
global.myNumber; //Delclaration of the global variable - undefined
global.myNumber = 5; //Global variable initialized to value 5. 
var myNumberSquared = global.myNumber * global.myNumber; //Using the global variable. 

グローバル変数に関しては、Node.js はクライアント側 JavaScript とは異なります。Node.js スクリプトの先頭で var という単語を使用したからといって、「basic-logger」などの必要なすべてのオブジェクトが変数にアクセスできるわけではありません。

何かをグローバルにするには、グローバルという単語とドットを変数名の前に置きます。したがって、company_id をグローバルにしたい場合は、global.company_id と呼びます。ただし、global.company_id と company_id は同じものなので、グローバル変数に他のスクリプトの他の変数と同じ名前を付けないでください。サーバーまたは同じコード内の他の場所で実行される他のスクリプトです。 .

于 2013-06-21T05:38:41.020 に答える
32

global または GLOBAL を使用して定義できます。nodejs は両方をサポートします。

例えば

global.underscore = require("underscore");

また

GLOBAL.underscore = require("underscore");
于 2015-08-03T06:26:59.950 に答える
25

グローバルチェックを使用するときは、変数が単にチェックによってすでに定義されているかどうかを毎回お勧めします

if (!global.logger){
  global.logger = require('my_logger');
}

より優れたパフォーマンスを発揮することがわかりました

于 2015-07-14T15:42:58.027 に答える
12

グローバル変数は、賢明に使用すれば Node で使用できます。

Node でのグローバル変数の宣言:

a = 10;
GLOBAL.a = 10;
global.a = 10;

上記のコマンドはすべて、異なる構文で同じアクションを実行します。

変更しない場合はグローバル変数を使用する

グローバル変数を使用した場合に発生する可能性のある例を次に示します。

// app.js
a = 10; // no var or let or const means global

// users.js
app.get("/users", (req, res, next) => {
   res.send(a); // 10;
});

// permissions.js
app.get("/permissions", (req, res, next) => {
   a = 11; // notice that there is no previous declaration of a in the permissions.js, means we looking for the global instance of a.
   res.send(a); // 11;
});

説明:

ユーザールートを最初に実行し、10 を受け取ります。

次に、パーミッション ルートを実行し、11 を受け取ります。

次に、ユーザーのルートを再度実行し、10 の代わりに 11 も受け取ります。

グローバル変数を追い越すことができます!

ここで、express および assignin res オブジェクトをグローバルとして使用することを検討してください。そして、非同期エラーが発生し、サーバーがシャットダウンされます。

グローバル変数を使用する場合

私が言ったように - var が変更されようとしていないとき。とにかくprocess.env、設定ファイルのオブジェクトを使用することをお勧めします。

于 2018-12-30T08:09:44.327 に答える
6

アプリが TypeScript で記述されている場合は、試してください

(global as any).logger = // ...

また

Object.assign(global, { logger: // ... })

__DEV__ただし、React Nativeがテスト環境にある場合のみ行います。

于 2019-07-09T12:09:56.933 に答える