Использовать методы внешнего интерфейса от внешнего метеорного приложения
Я делаю приложение, основанное на докерезированных сервисах. Некоторые из услуг будут записаны в метеоре, а некоторые не будут.
Одна из услуг - это служба регистрации, где пользователи могут зарегистрироваться на платформе.
При выполнении микросервисов я обычно делаю следующее:
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
и он должен использовать другие методы приложения для входа.