2015-05-08 9 views
10

Wykonuję aplikację opartą na usługach dokowanych. Niektóre z usług będą napisane meteorytem, ​​inne nie.Metody nakładania połączeń z aplikacji zewnętrznego meteoru

Jedną z usług jest usługa rejestracji, w której użytkownicy mogą zarejestrować się na platformie.

Podczas microservices, normalnie I wykonaj następujące czynności:

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

Co chcę zrobić jest użycie metody loginWithFacebook. Problem polega na tym, że użycie na interfejsie Meteor.loginWithFacebook wywoła metody backendu na głównym serwerze frontendowym.

Jednak chcę wywołać jego metody zaplecza na serwerze RegistrationService (który ma odpowiednie pakiety). Powodem jest to, że używam haka Accounts.onCreateUser do robienia dodatkowych rzeczy, a także dlatego, że chcę, aby usługa rejestracji była oddzielona od frontendu.

Tak dla jasności, mimo że nie jest poprawne, wyobrazić mam to:

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

Jednakże chcę metoda loginWithFacebook używać metod po stronie serwera z RegistrationServicepodczas wywoływania po stronie klienta metoda .loginWithFacebook, więc rzeczywiście chcą coś zrobić, aby efekt następujący:

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

Każda pomoc w tej sprawie będzie bardzo mile widziane. Dziękuję Ci!

Odpowiedz

1

Wierzę, że szukasz DDP.connect. Zasadniczo pod meteorem wszystkie połączenia z serwerem od klienta, a cała komunikacja z serwera do klienta korzysta z Distributed Data Protocol. (https://www.meteor.com/ddp) Zgodnie z dokumentacją domyślnie klient otwiera połączenie DDP z serwerem, z którego został załadowany. Jednak w twoim przypadku będziesz chciał użyć DDP.connect do łączenia się z innymi serwerami w celu wykonywania różnych zadań, takich jak serwer usług rejestracji dla usługi RegistrationService. (http://docs.meteor.com/#/full/ddp_connect) W uproszczonym przykładzie będziesz chce zrobić coś takiego:

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

nie należy zapominać, że można mieć różne DDP.connect do swoich różnych microservices. Są one podobne do połączeń usług internetowych w innych aplikacjach.

+0

Problem polega na tym, że kiedy to zrobię, otrzymuję błąd TypeError mówiący, że "registrationServices.loginWithFacebook" jest niezdefiniowany. W aplikacji Meteor aplikacji backend (dla registrationServices) jest tylko folder serwera i nie ma folderu klienta - czy to może być problem? – user2205763

+0

Nie, w tym przypadku nie powinieneś potrzebować folderu klienta. Zasadniczo w moim przykładzie nazwałem to jako metodę po stronie klienta. Musi być wywołana jako metoda po stronie serwera. Uaktualnię odpowiedź nieco lepiej, ale w zasadzie będziesz chciał użyć registrationService.call ("loginWithFacebook", ...); –

+0

Proszę bardzo, zaktualizowałem ten przykład do pracy z połączeniem po stronie serwera nieco lepiej. Daj mi znać, jak to działa. –

1

Możesz może osiągnąć połączenia przez drugą usługę, określając zdalnego połączenia przez usługę do Accounts i Meteor.users.

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

Następnie nazwałbym Meteor.loginWithFacebook i powinien stosować metody innej aplikacji dla rejestrowania w

Powiązane problemy