为什么 Meteor.call() 不被识别?
Why is Meteor.call() not recognized?
这个问题已经从它的 演变而来,有人建议我 post 一个新问题。
当我调用我的“insertPerson”方法,然后调用我的“getTextAddrAsEmailAddr”方法时,我看到,在控制台中,我的两个调试 console.log 消息:
I20151022-07:59:07.240(-7)? insertPerson reached
I20151022-07:59:07.365(-7)? phone is 0871632810
...后跟此异常:
I20151022-07:59:07.365(-7)? Exception while invoking method 'insertPerson' TypeE
rror: Cannot call method 'call' of undefined
I20151022-07:59:07.365(-7)? at [object Object].Meteor.methods.getTextAddrAsE
mailAddr (both/methods.js:37:28)
注意:methods.js 中的第 37 行是:
return Meteor.http.call("GET", restcall);
对于上下文,整个 methods.js 文件是:
Meteor.methods({
'insertPerson': function(firstname, lastname, streetaddr1, streetaddr2, placename, stateorprov, zipcode, emailaddr, phone, notes) {
console.log('insertPerson reached'); // TODO: Remove before deploying
check(firstname, String);
. . .
console.log('phone is ' + phone);
var textAddrAsEmailAddr = Meteor.call('getTextAddrAsEmailAddr', phone);
console.log('textAddrAsEmailAddr is ' + textAddrAsEmailAddr);
People.insert({
per_firstname: firstname,
per_lastname: lastname,
per_streetaddr1: streetaddr1,
per_streetaddr2: streetaddr2,
per_placename: placename,
per_stateorprov: stateorprov,
per_zipcode: zipcode,
per_emailaddr: emailaddr,
per_phone: phone,
per_textaddrasemailaddr: phone,
per_notes: notes,
per_createdBy: this.userId
});
},
'getTextAddrAsEmailAddr': function(phone) {
this.unblock();
var restcall = 'http://www.reminder.com/phone.check.php?number=' + phone;
return Meteor.http.call("GET", restcall);
}
});
我的 Meteor.http.call() 调用有问题吗?
根据 docs.
应该是 HTTP.call()
而不是 Meteor.http.call()
(同时确保您已添加带有 meteor add http
的包)。
好吧,它在文档中并没有写成一个硬道理,但我很确定,Meteor.call()
预计会从客户端到服务器进行远程调用。
此外,我想知道,你已经"on server side".
,为什么会在这个时候做一个Meteor.call()
尝试:
function getTextAddrAsEmailAddr(scope, phone) {
scope.unblock();
var restcall = 'http://www.reminder.com/phone.check.php?number=' + phone;
return HTTP.get(restcall);
}
Meteor.methods({
'insertPerson': function(firstname, lastname, streetaddr1, streetaddr2, placename, stateorprov, zipcode, emailaddr, phone, notes) {
console.log('insertPerson reached'); // TODO: Remove before deploying
check(firstname, String);
. . .
console.log('phone is ' + phone);
var textAddrAsEmailAddr = getTextAddrAsEmailAddr(this, phone);
console.log('textAddrAsEmailAddr is ' + textAddrAsEmailAddr);
People.insert({
per_firstname: firstname,
per_lastname: lastname,
per_streetaddr1: streetaddr1,
per_streetaddr2: streetaddr2,
per_placename: placename,
per_stateorprov: stateorprov,
per_zipcode: zipcode,
per_emailaddr: emailaddr,
per_phone: phone,
per_textaddrasemailaddr: phone,
per_notes: notes,
per_createdBy: this.userId
});
return true;
}
});
如果您希望函数 getTextAddrAsEmailAddr
也可用作 Meteor 方法,只需添加:
'getTextAddrAsEmailAddr': function(phone) {
return getTextAddrAsEmailAddr(this, phone);
}
希望能为您解决问题
干杯
汤姆
更新:
我想知道使用 Meteor.call()
的开销和正确性
你可以随时随地使用它
注意开销
Meteor.call
定义于:
Package ddp-client/livedata_connection.js L665
并将一直通过 Meteor.apply
运行,定义在:
Package ddp-client/livedata_connection.js L706
如果您从 L707-L912 检查该来源,我想这并不奇怪,直接调用该函数的建议效率更高。
这个问题已经从它的
当我调用我的“insertPerson”方法,然后调用我的“getTextAddrAsEmailAddr”方法时,我看到,在控制台中,我的两个调试 console.log 消息:
I20151022-07:59:07.240(-7)? insertPerson reached
I20151022-07:59:07.365(-7)? phone is 0871632810
...后跟此异常:
I20151022-07:59:07.365(-7)? Exception while invoking method 'insertPerson' TypeE
rror: Cannot call method 'call' of undefined
I20151022-07:59:07.365(-7)? at [object Object].Meteor.methods.getTextAddrAsE
mailAddr (both/methods.js:37:28)
注意:methods.js 中的第 37 行是:
return Meteor.http.call("GET", restcall);
对于上下文,整个 methods.js 文件是:
Meteor.methods({
'insertPerson': function(firstname, lastname, streetaddr1, streetaddr2, placename, stateorprov, zipcode, emailaddr, phone, notes) {
console.log('insertPerson reached'); // TODO: Remove before deploying
check(firstname, String);
. . .
console.log('phone is ' + phone);
var textAddrAsEmailAddr = Meteor.call('getTextAddrAsEmailAddr', phone);
console.log('textAddrAsEmailAddr is ' + textAddrAsEmailAddr);
People.insert({
per_firstname: firstname,
per_lastname: lastname,
per_streetaddr1: streetaddr1,
per_streetaddr2: streetaddr2,
per_placename: placename,
per_stateorprov: stateorprov,
per_zipcode: zipcode,
per_emailaddr: emailaddr,
per_phone: phone,
per_textaddrasemailaddr: phone,
per_notes: notes,
per_createdBy: this.userId
});
},
'getTextAddrAsEmailAddr': function(phone) {
this.unblock();
var restcall = 'http://www.reminder.com/phone.check.php?number=' + phone;
return Meteor.http.call("GET", restcall);
}
});
我的 Meteor.http.call() 调用有问题吗?
根据 docs.
应该是HTTP.call()
而不是 Meteor.http.call()
(同时确保您已添加带有 meteor add http
的包)。
好吧,它在文档中并没有写成一个硬道理,但我很确定,Meteor.call()
预计会从客户端到服务器进行远程调用。
此外,我想知道,你已经"on server side".
,为什么会在这个时候做一个Meteor.call()
尝试:
function getTextAddrAsEmailAddr(scope, phone) {
scope.unblock();
var restcall = 'http://www.reminder.com/phone.check.php?number=' + phone;
return HTTP.get(restcall);
}
Meteor.methods({
'insertPerson': function(firstname, lastname, streetaddr1, streetaddr2, placename, stateorprov, zipcode, emailaddr, phone, notes) {
console.log('insertPerson reached'); // TODO: Remove before deploying
check(firstname, String);
. . .
console.log('phone is ' + phone);
var textAddrAsEmailAddr = getTextAddrAsEmailAddr(this, phone);
console.log('textAddrAsEmailAddr is ' + textAddrAsEmailAddr);
People.insert({
per_firstname: firstname,
per_lastname: lastname,
per_streetaddr1: streetaddr1,
per_streetaddr2: streetaddr2,
per_placename: placename,
per_stateorprov: stateorprov,
per_zipcode: zipcode,
per_emailaddr: emailaddr,
per_phone: phone,
per_textaddrasemailaddr: phone,
per_notes: notes,
per_createdBy: this.userId
});
return true;
}
});
如果您希望函数 getTextAddrAsEmailAddr
也可用作 Meteor 方法,只需添加:
'getTextAddrAsEmailAddr': function(phone) {
return getTextAddrAsEmailAddr(this, phone);
}
希望能为您解决问题
干杯 汤姆
更新:
我想知道使用 Meteor.call()
你可以随时随地使用它
注意开销
Meteor.call
定义于:
Package ddp-client/livedata_connection.js L665
并将一直通过 Meteor.apply
运行,定义在:
Package ddp-client/livedata_connection.js L706
如果您从 L707-L912 检查该来源,我想这并不奇怪,直接调用该函数的建议效率更高。