据我所知,Meteor方法允许您进行客户端到服务器调用,但是从Meteor方法(即服务器到服务器调用)调用另一个函数或方法的最佳方法是什么。
现在如果我做一个常规的JS函数调用它只有在JS文件位于lib文件夹中时才有效。但我需要它在服务器文件夹中。
这是代码
我有一个主题集合,它位于集合文件夹中,具有以下内容
我有以下这是一个集合
Meteor.methods({
topicPost: function(topicAttributes) {
var user = Meteor.user(),
topicWithSameTitle = Topics.findOne({title: topicAttributes.title});
// ensure the user is logged in
if (!user)
throw new Meteor.Error(401, "You need to login to add a new topic");
Meteor.call('checkUser');
}
});
然后,我有以下方法,它位于服务器文件夹
中Meteor.methods({
checkUser: function () {
alert('aaaa');
}
});
答案 0 :(得分:2)
此有效,但这不是一个好方法。我处理此问题的方法是将所有我的函数置于 Meteor.methods
之外,并在必要时简单地转发到正确的函数。
// Client
Meteor.call('foo');
和
// Server
Meteor.methods({
foo: function() {
foo();
}
});
foo = function() {
foo = bar;
};
优点是可以在没有foo
的情况下从服务器上的任何位置调用Meteor.call
fn。同时,Meteor.methods
只暴露客户绝对必要的东西。
[编辑] 对于你所谈论的'foo'有些含糊不清;显然,服务器知道你的意思是methods
呼叫之外的那个。但如果你感到困惑,你可以随时重命名。这样做的好处是所涉及的重构次数很少。
答案 1 :(得分:0)
对于那些没有注意到OP的代码实际上包含答案的读者来说,您只需这样做
Meteor.call('checkUser');
服务器上的。根据流星文档(https://docs.meteor.com/api/methods.html#Meteor-call),在服务器上,如果使用不带回调参数的Meteor.call(),则调用将同步运行并等待结果。例如,如果编写了“ checkUser”以提供userId值,则只需
let userId = Meteor.call('checkUser');
但是,在客户端上,您必须提供一个回调函数作为Meteor.call()的参数,并且userId将异步提供给您的回调函数。