为什么在Meteor方法中,console.log()不能在客户端工作?

时间:2015-06-22 14:03:24

标签: javascript methods meteor client console.log

我想为客户端和服务器定义相同的方法,因此我在common/methods.js中有以下代码。

Meteor.methods({
    doSomething: function (obj) {
        if(this.isSimulation) {
            console.log('client');
        }
        if(!this.isSimulation) {
            console.log('server');
        }
        console.log('both');
        return "some string";
    }
});

然后我在client/dev.js内调用了这个方法。

Meteor.call('doSomething', someObj, function (e, data) {
    console.log(e);
    console.log(data);
});

在服务器的控制台上,我可以阅读:

I20150622-21:56:40.460(8)? server
I20150622-21:56:40.461(8)? both

在客户端(Chrome for Ubuntu v43.0.2357.125(64位))控制台上,打印edata个参数,但Meteor方法中的console.log()不是,我希望它输出字符串

client
both

为什么console.log()无法在Meteor方法中的客户端上运行?

要进行调试,我将Meteor.methods拆分为单独的客户端和服务器代码。然后引入一个大循环,以便服务器端操作,因此需要很长时间才能完成,而客户端则非常快。

服务器

doSomething: function (obj) {
    var x = 0;
    for(var i = 0; i< 9999999; i++) {
        x++;
    }
    console.log(x);
    return "some string";
}

客户端

doSomething: function (obj) {
    console.log('client');
}

但是,客户端上没有打印任何消息。

2 个答案:

答案 0 :(得分:1)

感谢@kainlite帮助我一起调试。事实证明问题是file load order中的一个简单问题。

我在common/methods.js中定义了我的方法,而我的客户端调用是在client/dev.js中进行的,首先加载。

所以当调用时,方法没有定义,因此它不会运行。将methods.js目录移动到/lib目录中可以解决问题。

答案 1 :(得分:-1)

方法仅在服务器上执行,它们是 sync 进行远程调用的方式。

  

方法

     

方法是可以从客户端调用的服务器函数。他们   在你想要做更多事情的情况下很有用   比插入,更新或删除更复杂,或者当您需要执行数据时   只允许和拒绝很难实现验证。

http://docs.meteor.com/#/basic/Meteor-users