2016-12-20 5 views
0

Я создал два класса обслуживания. Ниже приведено определение класса ShellService.Как обмениваться данными между службами в nodejs

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; 
}; 

В своем методе создания он создает экземпляр оболочки и добавляет его в свой массив объектов оболочки. У меня есть еще один класс обслуживания отдыха и вы хотите получить доступ к объекту массива shells. Как я могу это сделать? Я пробовал ниже, но не работает:

const shellService = require('../shell-service') 
class SocketService { 
    ... 

Я объявил SocketService класс и требуют обслуживания оболочки. Но я не могу позвонить shellService.XXXX в мой класс SocketService. Что я должен сделать, чтобы достичь этого?

+0

Вы хотите явно инициализировать класс 'shell-service'? или это хорошо, если вы можете просто получить доступ к его методу статически? – Sridhar

+0

Я не хочу использовать его статически. Есть ли способ получить свой экземпляр в SocketService? –

+0

'create' должен возвращать разные экземпляры, каждый раз, когда он вызывается. Только логика для создания такая же. Правильно ли я об этом? – Sridhar

ответ

1

Поскольку вы уже хранят ссылку оболочки в this.shells[id] вы, вероятно, хотите реализовать .findservice method, который возвращает список всех доступных оболочек:

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 '). Find()' в моем классе SocketService? У него нет экземпляра приложения в классе. –

+0

Вы можете установить приложение в методе 'setup': https://docs.feathersjs.com/services/readme.html#the-setup-method – Daff

Смежные вопросы