2012-06-11 16 views
34

は、たとえば、私は、カスタムロガーを使用したい:node.jsでグローバル変数を使用するには?

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

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

var log = new logger(customConfig) 

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

+1

http://stackoverflow.com/questionsこの記事を参照してください/ 4140661/global-variables-for-node-js-standard-modules – xvatar

答えて

66

多くの人がグローバル変数の使用を勧めます。

:あなたは異なるモジュールで同じロガークラスを使用する場合は、あなたが行うことができますグローバル変数をしたいならば、あなたはこの

logger.js

module.exports = new logger(customConfig); 

foobar.js

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

を行うことができます

global.logger = new logger(customConfig); 
+20

グローバル変数を使用しないでください!複数のプロセスを使用してアプリケーションを実行すると、非常に悪い結果を招きます。 – TheHippo

+0

グローバル定義に '.'を忘れましたか? 'global.logger =新しいロガー(customConfig);'? – jagill

+14

複数のプロセスを使用している場合でも、グローバル変数Hippoは場合によっては問題ありません。たとえば、複数のプロセスが独自のロガーオブジェクトのインスタンスを持つ場合、ロガーは問題を持ちません。 – d512

27
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という語を使用していても、あなたの「基本ロガー」など必要なすべてのオブジェクトから変数にアクセスできるわけではありません。

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

+0

ビルド時に各ファイル/モジュールがIIFEに暗黙的にラップされているので、それは実際には異なります。 – superluminary

15

変数がすでに単に、私はそれがより良いパフォーマンス

+0

「より良いパフォーマンス」とはどういう意味ですか? – wiktus239

+0

@ wiktus239これは、モジュールを再度ロードする必要がないので、チェックです。 –

16

を有することが分かってきたあなたは、グローバルまたはGLOBALを使用してそれを定義することができます

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

チェックによって定義された場合は、グローバルチェックを使用しているとき、私は毎回お勧めします、nodejsは両方をサポートしています。例えば

global.underscore = require("underscore"); 

または

GLOBAL.underscore = require("underscore"); 
+1

シンプルで、鮮明で、はっきりしています。ありがとう。 :) – Haranadh

+1

あなたの歓迎:) –

2

ため

次のことかもしれif声明を避けた方が良いです:

global.logger || (global.logger = require('my_logger')); 
関連する問題