我正在制作一个基于服务的基于服务的应用程序。有些服务将用流星写,有些服务不会。
其中一项服务是注册服务,用户可以注册该平台。
在做微服务时,通常我会执行以下操作:
var MyService = DDP.connect(service_url);
var MyOtherService = DDP.connect(other_service_url);
var RegistrationService = DDP.connect(registration_service_url);
我想要做的是使用loginWithFacebook
方法。问题是在前端使用Meteor.loginWithFacebook
将在主前端服务器上调用其后端方法。
但是,我想在RegistrationService服务器(具有相关包)上调用其后端方法。原因是因为我使用Accounts.onCreateUser
挂钩做额外的事情,也因为我想让注册服务与前端分开。
为了清楚起见,即使它不正确,想象一下我有这个:
'click #facebook-login': function() {
Meteor.loginWithFacebook(data, callback)
}
但是,我希望loginWithFacebook
方法在调用客户端方法.loginWithFacebook 时使用RegistrationService
中的服务器端方法,所以我实际上想做以下内容的效果:
'click #facebook-login': function() {
RegistrationService.loginWithFacebook(data, callback)
}
对此的任何帮助将不胜感激。谢谢!
答案 0 :(得分: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.
}
});
}
不要忘记您还可以将各种DDP.connect连接到各种微服务。这些类似于其他应用程序中的Web服务连接。
答案 1 :(得分:1)
您可以通过指定服务与Accounts
和Meteor.users
的远程连接来实现与其他服务的连接:
var RegistrationService = DDP.connect(registration_service_url);
Accounts.connection = RegistrationService;
Meteor.users = new Meteor.Collection('users',{connection: RegistrationService});
然后会调用Meteor.loginWithFacebook
,它应该使用其他应用程序的方法登录。