【问题标题】:Error invoking Method '': Method not found [404]调用方法“”时出错:找不到方法 [404]
【发布时间】:2016-10-19 22:10:42
【问题描述】:

在 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


    【解决方案1】:

    当您使用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');

    【讨论】:

    • 非常感谢阿克沙特!我对Meteor.call() 是什么有一个重大误解,这真的为我解开了!感谢您抽出宝贵时间如此详细地回答我的问题,也感谢您花时间回答所有其他问题。
    【解决方案2】:

    我注意到字母名称对于加载三个调用方法很重要。 当我有下一个结构时,我遇到了同样的问题

    server
      |----- dht-setup.js
      |----- methods.js
    

    然后,dht-setup 看不到 methods.js 方法。相反,我更改了文件名:

    server
      |---- _methods.js
      |---- dht-sensor.js
    

    404 未找到,解决。当想要将函数与模板分开时,我在客户端发现了同样的问题,例如,将 D3js 函数与模板分开。您可能需要使用“下划线”字符“_”确保按字母顺序加载的顶部。 考虑到这一点,因为示例工作正常,因为方法是在 STARTUP.JS 中定义的,至少是字母词。

    【讨论】:

    • 这本不应该奏效,但它确实奏效了!大声笑,多么疯狂的解决方案。非常感谢。解开它以确保我没有疯,我也没有。
    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 2023-03-11
    • 2016-04-21
    • 2023-03-18
    • 2016-11-08
    • 1970-01-01
    相关资源
    最近更新 更多