2016-12-20 10 views
0

2つのサービスクラスを作成しました。以下はShellServiceクラスの定義です。ノード内のサービス間でデータを共有する方法

class ShellService { 

    create(data, params) { 
    if (Array.isArray(data)) { 
     return Promise.all(data.map(current => this.create(current))); 
    } 
    let hostname=params.query.hostname 
    let port = params.query.port 
    const id = _.uniqueId(); 

    this.shells[id] = spawn('mongo', ['--host', hostname, '--port', port]); 

    return Promise.resolve({id}); 
    } 
... 
} 
module.exports = function() { 
    // Initialize our service with any options it requires 
    let service =new ShellService() 

    return service; 
}; 

createメソッドでは、シェルインスタンスを作成し、それをシェル配列オブジェクトに追加します。別の休憩サービスクラスがあり、シェル配列オブジェクトにアクセスする必要があります。どうやってやるの?私は以下を試してみましたが、うまくいきませんでした。クラスを宣言し、シェルサービスが必要です。しかし私はSocketServiceクラスにshellService.XXXXを呼び出すことはできません。これを達成するために私は何をすべきですか?

+0

'shell-service'クラスを明示的に初期化しますか?静的にメソッドにアクセスできるのであれば問題ありませんか? – Sridhar

+0

私はそれを静的に使用したくありません。そのインスタンスをSocketServiceで取得する方法はありますか? –

+0

'create'は呼び出されるたびに異なるインスタンスを返す必要があります。ただ、作成するロジックは同じです。私はこれについて正しいですか? – Sridhar

答えて

1

あなたはすでにあなたはおそらく、すべての利用可能なシェルのリストを返し.findservice method実装したいthis.shells[id]でシェルの参照を格納しているので:

class ShellService { 
    find() { 
    const shellProcesses = this.shells; 
    const shells = Object.keys(shellProcesses).map(key => { 
     const shell = shellProcesses[key]; 

     return { 
     id: shell.pid 
     } 
    }); 

    return Promise.resolve(shells); 
    } 

    create(data, params) { 
    if (Array.isArray(data)) { 
     return Promise.all(data.map(current => this.create(current))); 
    } 
    let hostname=params.query.hostname 
    let port = params.query.port 
    const id = _.uniqueId(); 

    this.shells[id] = spawn('mongo', ['--host', hostname, '--port', port]); 

    return Promise.resolve({id}); 
    } 
} 
module.exports = function() { 
    // Initialize our service with any options it requires 
    let service =new ShellService() 

    return service; 
}; 

一度あなたがapp.service('shells').find().then(shellInfo =>)を使用することができ羽のサービスとして登録します。

+0

私はどこで 'app.service(' shells ')と呼びますか?私のSocketServiceクラスのfind()クラススコープにappインスタンスがありません。 –

+0

アプリを 'setup'メソッドで設定することができます:https://docs.feathersjs.com/services/readme.html#the-setup-method – Daff

関連する問題