调用方法“”时出错:找不到方法 [404]
Error invoking Method '': Method not found [404]
在 Meteor 中,我在客户端定义的每个方法都会出现此错误:
Error invoking Method 'activeMenu': Method not found [404]
举个例子,在我的代码中,我定义了这个方法,像这样:
/client/js/startup/methods.js
Meteor.methods({
...
activeMenu: function() {
if(Session.get('menu')) {
$('.menu').removeClass('active');
$('#' + Session.get('menu')).addClass('active');
}
},
...
});
它从两个地方调用 - 当应用程序首次呈现时,以及在路由器完成路由之后:
client/js/rendered.js
Template.ApplicationLayout.rendered = function() {
Meteor.call('activeMenu');
}
/client/js/utils/router.js
Router.onAfterAction(function () {
Meteor.call('activeMenu');
});
每次调用都会引发错误。但是,该方法仍然有效,我得到了预期的结果,所以调用一定是成功的,但我仍然遇到错误。这些方法仅在客户端运行,因为它们用于展示目的。我需要程序没有错误,因为我怀疑这就是 spiderable
不工作的原因。
当您使用 Meteor.methods
您 需要 服务器端的方法时,您只有存根方法,而客户端是可选的,以模拟延迟补偿。
Meteor 调用的工作方式是,当您 运行 一个调用时,它会立即触发客户端以模拟一些 UI 效果,同时从服务器返回响应,然后服务器边调用被触发。
它的存在是为了让您可以拥有一种看起来立即响应的方法,即使服务器实际上可能需要一些时间才能响应。
由于您没有相应的服务器端方法,当 Meteor 将调用发送到服务器时找不到它并响应错误 Method not found [404]
如果你想要一个只有客户端有效的方法,你应该使用标准的 js 方法,而不是 var
关键字以确保其全局作用域(并且可以从其他客户端访问副文件)
activeMenu = function() {
if(Session.get('menu')) {
$('.menu').removeClass('active');
$('#' + Session.get('menu')).addClass('active');
}
}
然后在你的其他代码中:
activeMenu()
而不是 Meteor.call('activeMenu');
我注意到按字母顺序命名对于加载三个调用方法很重要。
当我有下一个结构时我遇到了同样的问题
server
|----- dht-setup.js
|----- methods.js
然后,dht-setup 看不到 methods.js 方法。相反,我更改了文件的名称:
server
|---- _methods.js
|---- dht-sensor.js
404 Not found,解决。当我想将函数与模板分开时,我在客户端发现了同样的问题,例如,将 D3js 函数与模板分开。您可能需要使用 "underscore" 字符“_”确保按字母顺序加载的顶部。
考虑到这一点,因为示例工作正常,因为方法在 STARTUP.JS 中至少按字母顺序定义。
在 Meteor 中,我在客户端定义的每个方法都会出现此错误:
Error invoking Method 'activeMenu': Method not found [404]
举个例子,在我的代码中,我定义了这个方法,像这样:
/client/js/startup/methods.js
Meteor.methods({
...
activeMenu: function() {
if(Session.get('menu')) {
$('.menu').removeClass('active');
$('#' + Session.get('menu')).addClass('active');
}
},
...
});
它从两个地方调用 - 当应用程序首次呈现时,以及在路由器完成路由之后:
client/js/rendered.js
Template.ApplicationLayout.rendered = function() {
Meteor.call('activeMenu');
}
/client/js/utils/router.js
Router.onAfterAction(function () {
Meteor.call('activeMenu');
});
每次调用都会引发错误。但是,该方法仍然有效,我得到了预期的结果,所以调用一定是成功的,但我仍然遇到错误。这些方法仅在客户端运行,因为它们用于展示目的。我需要程序没有错误,因为我怀疑这就是 spiderable
不工作的原因。
当您使用 Meteor.methods
您 需要 服务器端的方法时,您只有存根方法,而客户端是可选的,以模拟延迟补偿。
Meteor 调用的工作方式是,当您 运行 一个调用时,它会立即触发客户端以模拟一些 UI 效果,同时从服务器返回响应,然后服务器边调用被触发。
它的存在是为了让您可以拥有一种看起来立即响应的方法,即使服务器实际上可能需要一些时间才能响应。
由于您没有相应的服务器端方法,当 Meteor 将调用发送到服务器时找不到它并响应错误 Method not found [404]
如果你想要一个只有客户端有效的方法,你应该使用标准的 js 方法,而不是 var
关键字以确保其全局作用域(并且可以从其他客户端访问副文件)
activeMenu = function() {
if(Session.get('menu')) {
$('.menu').removeClass('active');
$('#' + Session.get('menu')).addClass('active');
}
}
然后在你的其他代码中:
activeMenu()
而不是 Meteor.call('activeMenu');
我注意到按字母顺序命名对于加载三个调用方法很重要。 当我有下一个结构时我遇到了同样的问题
server
|----- dht-setup.js
|----- methods.js
然后,dht-setup 看不到 methods.js 方法。相反,我更改了文件的名称:
server
|---- _methods.js
|---- dht-sensor.js
404 Not found,解决。当我想将函数与模板分开时,我在客户端发现了同样的问题,例如,将 D3js 函数与模板分开。您可能需要使用 "underscore" 字符“_”确保按字母顺序加载的顶部。 考虑到这一点,因为示例工作正常,因为方法在 STARTUP.JS 中至少按字母顺序定义。