2017-07-05 13 views
0

シンプルでなければならないが、良い解決策を見つけることができない。ノードJS(Hapijs)では、サーバー変数にグローバルにアクセスする方法

たとえばノードモジュールで、何か問題が起きたときにログに記録します。ですから、私はHapi関数server.log(...)を使いたいと思っています。例:server.jsで

:ファイルtest.jsで

const server = new Hapi.Server({...}); 
server.connection({port:3000}); 
server.start((err) => { 
    if (err) { throw err } 
} 

、私はserver.jsで作成したサーバー変数を使用したいです。他のプラグインをロギングしてロードするので、どのモジュールでも使用できるはずです。

class Test { 
    logInfo(text) { 
    server.log(['info'], text); // this will not work. 
    } 
} 
module.exports = new Test(); 

私は、モジュールを呼び出すたびにサーバーを追加することができますが、それは過剰です。

作成されたモジュールの外部にあるサーバー変数への参照を取得するにはどうすればよいですか?

+0

通常、hapiアプリケーションでは、ハンドラ内のリクエストに応じて他のモジュールを呼び出すことになります。通常、ログインする必要がある場合は、ハンドラ/プラグインにログインします。プラグインではない外部モジュールはおそらくあなたのサーバやhapiの存在を知ってはいけません。 –

答えて

0

リクエスト中にメッセージを記録する場合は、request.log(...)を使用できます。

ハンドラ内のrequestオブジェクトのserverオブジェクトにアクセスして、server.log(...)を使用することもできます。

{ 
    method: 'GET', 
    path: '/do/stuff', 
    handler: function (request, reply) { 
     request.server.log('server.log() method'); 

     request.log('request.log() method'); 

     const test = new Test(request.server); 

     test.logInfo('some text here'); 
    } 
} 

hapiで私のanswer on loggingをチェックしてください。

具体的には、hapiサーバーイベントをログに記録する場合は、サーバーオブジェクトへの参照をモジュールに渡す必要があります。

class Test { 
    private server; 

    constructor(server) { 
     this.server = server; 
    } 

    logInfo(text) { 
     this.server.log(['info'], text); // this will work. 
    } 
} 

あなたの質問のコメントは正しいと思われます。モジュールの密結合を避けたい場合は、このパターンを避けるべきです。

関連する問題