2016-06-01 1 views
-1

Nodeでは、他の関数/クラスで使用したいロガーオブジェクトをインスタンス化する次の関数/クラスがあります。 main.js残りのアプリケーション用のmodule.exportsオブジェクトインスタンス

server.jsにおいて

var loggerUtil = require('./utils/logger'), 
    logger; 

module.exports = function(appInitCb, options) { 
    start: function() { 
     // Load .env 
     dotenv.config({ 
      silent: true 
     }); 

     // Merge the app configuration with default 
     options = _.merge({}, cfgDefaults, options); 

     // Create a logger 
     logger = loggerUtil.createLogger(options.logger).getLogger(); 
    }, 

    logger: logger 
}; 

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

server.start({}, {}); 
logger.info('Hello World'); 

しかし、エラーTypeError: logger.info is not a functionもたらします。私が輸出する方法に何か間違ったことを推測しています。どんな助けもありがとうございます。

+0

引用符がありませんか? – adeneo

+0

2つの './server'モジュールが意味をなさないことを要求するので、あなたが本当に達成したいことは何ですか。 – Nivesh

+0

さらに、最初にstartを呼び出してロガーオブジェクトをインスタンス化する必要があります。単純にそれを要求し、それを何度もインスタンス化しない場合、ロガーがすでにインスタンス化されているかどうかをチェックする必要があります。 – Nivesh

答えて

0

あなたは両方の機能を統合したオブジェクトを返すされていないので、

あなたの例では
module.exports = function(appInitCb, options) { 
    return({ 
    start: ... 
    log: ... 
    }) 

}

のようにそれをエクスポートする必要があります。

あなたはそのようにように、このモジュールが必要です(感謝@Nivesh)することができます

var server = require('./server')(); 
server.start(); 

更新

は、より良いアプローチは、オブジェクトを作成し、機能せずにモジュールに直接割り当てることであろう。あなたができる

var server = { 
    start: function(){...}, 
    log: function(){...}, 
} 

module.exports = server; 

その方法:

var server = require('./server'); 
server.start() 
server.log() 
+0

あなたはImが複数のものをエクスポートしているのを見ることができます。開始関数とロガーオブジェクトの両方。 – nixgadgets

+0

はい、彼女は複数のものを輸出しています。このアプローチの他に、お勧めしません。 – Nivesh

+0

ええ、今、その良い、@ nixgadgetsは、関数をエクスポートし、オブジェクトのように書くことです。それがここでの最も基本的な誤りです。 – Nivesh

関連する問題