MeteorJS Meteor方法从服务器调用服务器

时间:2014-04-20 22:44:19

标签: meteor

据我所知,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');
    }
});

2 个答案:

答案 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将异步提供给您的回调函数。