たとえば、カスタムロガーを使用したい:
logger = require('basic-logger'),
logger.setLevel('info')
var customConfig = {
showMillis: true,
showTimestamp: true
}
var log = new logger(customConfig)
console.log の代わりに他のモジュールでこのロガーを使用するには?
たとえば、カスタムロガーを使用したい:
logger = require('basic-logger'),
logger.setLevel('info')
var customConfig = {
showMillis: true,
showTimestamp: true
}
var log = new logger(customConfig)
console.log の代わりに他のモジュールでこのロガーを使用するには?
ほとんどの人は、グローバル変数を使用しないようにアドバイスしています。異なるモジュールで同じロガークラスが必要な場合は、これを行うことができます
ロガー.js
module.exports = new logger(customConfig);
foobar.js
var logger = require('./logger');
logger('barfoo');
グローバル変数が必要な場合は、次のようにします。
global.logger = new logger(customConfig);
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 は同じものなので、グローバル変数に他のスクリプトの他の変数と同じ名前を付けないでください。サーバーまたは同じコード内の他の場所で実行される他のスクリプトです。 .
global または GLOBAL を使用して定義できます。nodejs は両方をサポートします。
例えば
global.underscore = require("underscore");
また
GLOBAL.underscore = require("underscore");
グローバルチェックを使用するときは、変数が単にチェックによってすでに定義されているかどうかを毎回お勧めします
if (!global.logger){
global.logger = require('my_logger');
}
より優れたパフォーマンスを発揮することがわかりました
グローバル変数は、賢明に使用すれば 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
、設定ファイルのオブジェクトを使用することをお勧めします。
アプリが TypeScript で記述されている場合は、試してください
(global as any).logger = // ...
また
Object.assign(global, { logger: // ... })
__DEV__
ただし、React Nativeがテスト環境にある場合のみ行います。