从外部流星应用程序调用前端方法

use*_*763 10 meteor microservices meteor-accounts

我正在制作一个基于服务的dockerized应用程序.有些服务将用流星写,有些则不会.

其中一项服务是注册服务,用户可以在该服务中注册该平台.

在做微服务时,通常我会做以下事情:

var MyService = DDP.connect(service_url);
var MyOtherService = DDP.connect(other_service_url);
var RegistrationService = DDP.connect(registration_service_url);
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用该loginWithFacebook方法.问题是Meteor.loginWithFacebook在前端使用将在主前端服务器上调用其后端方法.

但是,我想在RegistrationService服务器(具有相关包)上调用其后端方法.原因是因为我使用Accounts.onCreateUser钩子做额外的东西,还因为我想保持注册服务与前端分开.

为了清楚起见,即使它不正确,想象一下我有这个:

'click #facebook-login': function() {
  Meteor.loginWithFacebook(data, callback)
}
Run Code Online (Sandbox Code Playgroud)

但是,我希望该loginWithFacebook方法RegistrationService 在调用客户端方法.loginWithFacebook时使用服务器端方法,所以我实际上想要做一些事情来实现以下效果:

'click #facebook-login': function() {
  RegistrationService.loginWithFacebook(data, callback)
}
Run Code Online (Sandbox Code Playgroud)

任何有关这方面的帮助将不胜感激.谢谢!

Tim*_*m C 1

我相信您正在寻找 DDP.connect。基本上在meteor之下,所有从客户端到服务器的调用以及从服务器到客户端的所有通信都使用分布式数据协议。( 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.
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

不要忘记,您还可以将各种 DDP.connect 连接到各种微服务。这些类似于其他应用程序中的 Web 服务连接。