Использовать методы внешнего интерфейса от внешнего метеорного приложения

Я делаю приложение, основанное на докерезированных сервисах. Некоторые из услуг будут записаны в метеоре, а некоторые не будут.

Одна из услуг - это служба регистрации, где пользователи могут зарегистрироваться на платформе.

При выполнении микросервисов я обычно делаю следующее:

var MyService = DDP.connect(service_url);
var MyOtherService = DDP.connect(other_service_url);
var RegistrationService = DDP.connect(registration_service_url);

Я хочу использовать метод loginWithFacebook. Проблема в том, что использование Meteor.loginWithFacebook в интерфейсе вызовет его бэкэнд-методы на главном интерфейсном сервере.

Тем не менее, я хочу вызвать свои бэкэнд-методы на сервере RegistrationService (который имеет соответствующие пакеты). Причина в том, что я использую hook Accounts.onCreateUser для выполнения дополнительных действий, а также потому, что я хочу, чтобы служба регистрации была отделена от внешнего интерфейса.

Просто для ясности, хотя это неверно, представьте, что у меня есть это:

'click #facebook-login': function() {
  Meteor.loginWithFacebook(data, callback)
}

Тем не менее, я хочу, чтобы метод loginWithFacebook использовал серверные методы от RegistrationService при вызове метода на стороне клиента .loginWithFacebook, поэтому я действительно хочу что-то сделать с этим эффектом из следующего:

'click #facebook-login': function() {
  RegistrationService.loginWithFacebook(data, callback)
}

Любая помощь по этому поводу будет принята с благодарностью. Спасибо!

Ответ 1

Я считаю, что вы ищете DDP.connect. В основном под метеоритом все вызовы на сервер от клиента и все коммуникации с сервера на клиент используют протокол распределенных данных. (https://www.meteor.com/ddp) Как указывается в документации, клиент по умолчанию открывает соединение DDP с сервером, из которого он загружен. Однако в вашем случае вы хотите использовать DDP.connect для подключения к другим серверам для различных задач, таких как сервер служб регистрации для RegistrationService. (http://docs.meteor.com/#/full/ddp_connect). В качестве упрощенного примера вы будете искать что-то вроде этого:

if (Meteor.isClient) {
    var registrationServices = DDP.connect("http://your.registrationservices.com:3000");

    Template.registerSomething.events({
        'click #facebook-login': function(){
            registrationServices.call('loginWithFacebook', data, function(error, results){ ... }); // registration services points to a different service from your default.
        }
    });
}

Не забывайте, что вы также можете использовать различные DDP.connect для различных микросервисов. Они похожи на соединения веб-сервисов в других приложениях.

Ответ 2

Возможно, вы можете связаться с вашим другим сервисом, указав удаленное соединение службы на Accounts и Meteor.users:

var RegistrationService = DDP.connect(registration_service_url);
Accounts.connection = RegistrationService;
Meteor.users = new Meteor.Collection('users',{connection: RegistrationService});

Затем вызывается Meteor.loginWithFacebook и он должен использовать другие методы приложения для входа.