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

Why is console.log() not working client-side when inside Meteor methods?

我想为客户端和服务器定义相同的方法,所以我在里面有以下代码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');
}

仍然,客户端上没有打印任何消息。

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

Methods

Methods are server functions that can be called from the client. They are useful in situations where you want to do something more complicated than insert, update or remove, or when you need to do data validation that is difficult to achieve with just allow and deny.

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

感谢@kainlite 帮助我一起调试。事实证明问题是 file load order.

中的一个简单问题

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

因此调用时未定义方法,因此不会 运行。将 methods.js 文件移动到 /lib 目录中解决了这个问题。