我想为客户端和服务器定义相同的方法,因此我在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位))控制台上,打印e
和data
个参数,但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');
}
但是,客户端上没有打印任何消息。
答案 0 :(得分:1)
感谢@kainlite帮助我一起调试。事实证明问题是file load order中的一个简单问题。
我在common/methods.js
中定义了我的方法,而我的客户端调用是在client/dev.js
中进行的,首先加载。
所以当调用时,方法没有定义,因此它不会运行。将methods.js
目录移动到/lib
目录中可以解决问题。
答案 1 :(得分:-1)
方法仅在服务器上执行,它们是 sync 进行远程调用的方式。
方法
方法是可以从客户端调用的服务器函数。他们 在你想要做更多事情的情况下很有用 比插入,更新或删除更复杂,或者当您需要执行数据时 只允许和拒绝很难实现验证。