2015-05-08 18 views
10

Tôi đang tạo ứng dụng dựa trên dịch vụ được gắn đế. Một số dịch vụ sẽ được viết bằng thiên thạch, một số sẽ không.Gọi phương thức giao diện người dùng từ ứng dụng thiên thạch bên ngoài

Một trong các dịch vụ là dịch vụ đăng ký, nơi người dùng có thể đăng ký nền tảng.

Khi làm microservices, bình thường tôi làm như sau:

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

Những gì tôi muốn làm là sử dụng phương pháp loginWithFacebook. Vấn đề là sử dụng Meteor.loginWithFacebook trên giao diện người dùng sẽ gọi các phương thức phụ trợ của nó trên máy chủ giao diện người dùng chính.

Tuy nhiên, tôi muốn gọi các phương thức phụ trợ của nó trên máy chủ RegistrationService (trong đó có các gói có liên quan). Lý do là vì tôi đang sử dụng móc Accounts.onCreateUser để thực hiện các công cụ bổ sung và cũng bởi vì tôi muốn giữ dịch vụ đăng ký riêng biệt với giao diện người dùng.

Chỉ cần cho rõ ràng, mặc dù nó không phải là chính xác, hãy tưởng tượng tôi có điều này:

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

Tuy nhiên, tôi muốn phương pháp loginWithFacebook sử dụng các phương pháp server-side từ RegistrationServicekhi gọi các client-side phương pháp .loginWithFacebook, vì vậy tôi thực sự muốn làm gì đó để tác động trong các cách sau:

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

Bất kỳ giúp đỡ về vấn đề này sẽ được đánh giá rất nhiều. Cảm ơn bạn!

Trả lời

1

Tôi tin rằng bạn đang tìm kiếm DDP.connect. Về cơ bản bên dưới meteor tất cả các cuộc gọi đến máy chủ từ khách hàng và tất cả các thông tin liên lạc từ máy chủ cho khách hàng sử dụng phân phối dữ liệu giao thức. (https://www.meteor.com/ddp) Theo tài liệu chỉ ra theo mặc định một khách hàng sẽ mở một kết nối DDP đến máy chủ nó được tải từ. Tuy nhiên, trong trường hợp của bạn, bạn muốn sử dụng DDP.connect để kết nối với các máy chủ khác cho các tác vụ khác nhau, chẳng hạn như máy chủ dịch vụ đăng ký cho RegistrationService. (http://docs.meteor.com/#/full/ddp_connect) Là một ví dụ đơn giản bạn sẽ tìm cách để làm điều gì đó như thế này:

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

Đừng quên rằng bạn cũng có thể khác nhau của DDP.connect để microservices khác nhau của bạn. Đây giống như các kết nối dịch vụ web trong các ứng dụng khác.

+0

Vấn đề là khi tôi làm điều này, tôi nhận được một TypeError nói rằng "registrationServices.loginWithFacebook" là không xác định. Trên ứng dụng Meteor phụ trợ (đối với registrationServices), chỉ có một thư mục máy chủ và không có thư mục máy khách nào - đây có phải là vấn đề không? – user2205763

+0

Không, trong trường hợp này, bạn không cần thư mục máy khách. Về cơ bản trong ví dụ của tôi, tôi gọi nó giống như một phương thức phía máy khách. Nó phải được gọi là phương thức phía máy chủ. Tôi sẽ cập nhật câu trả lời trong một chút với cú pháp tốt hơn nhưng về cơ bản bạn sẽ muốn sử dụng registrationService.call ('loginWithFacebook', ...); –

+0

Có bạn đi, tôi đã cập nhật ví dụ để làm việc với phía máy chủ gọi tốt hơn một chút. Hãy cho tôi biết nó hoạt động ra sao. –

1

Bạn có lẽ có thể đạt được kết nối thông qua dịch vụ khác của bạn bằng cách xác định kết nối từ xa của dịch vụ để AccountsMeteor.users:.

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

Sau đó sẽ gọi Meteor.loginWithFacebook và nó nên sử dụng phương pháp ứng dụng khác cho khai thác gỗ trong

Các vấn đề liên quan