【问题标题】:Meteor Call Server Method in Client Got 404 Method Not Found Error客户端中的 Meteor 调用服务器方法得到 404 Method Not Found 错误
【发布时间】:2016-10-19 22:28:54
【问题描述】:

我是流星新手,在尝试调用客户端上的服务器方法时遇到了问题。

// Client code 
Template.email.events({  
 'click #test-button' : function(e, t) {      
    Meteor.call('testMethod', function(err, response){
      if (err) {
        alert("error: "+ err)
      } else{
        alert("success")
      }
    });        
 }
})

// server code
if (Meteor.isServer) {

  Meteor.methods({
    testMethod: function () {
       return "success";
    }
  });
}

当我单击按钮时,出现错误:找不到方法 404。我试图将服务器方法放入 Meteor.startup 中,但仍然出现相同的错误。我错过了什么?

【问题讨论】:

    标签: meteor


    【解决方案1】:

    您的代码似乎只在客户端运行。将if (Meteor.isServer) 中的块移动到项目的/server 目录中的一个javascript 文件中。

    /client 目录中的代码根本不会在服务器上运行,因此Meteor.isServer 将始终为false,并且该方法永远不会在客户端或服务器上创建

    【讨论】:

    • 抱歉回复晚了。当我将代码移动到服务器文件夹时它可以工作。但是,Meteor.isServer 的意义何在?
    • 如果您将代码放在根目录中(在服务器和客户端上运行),它用于区分您运行代码的位置。有时您可能希望共享相同的代码,但在服务器和客户端之间进行少量调整。但它不太可取,因为服务器端代码的副本会发送到客户端,但它不会运行。
    【解决方案2】:

    Meteor.methods({...}) 放在Meteor.isServer() 之外,Meteor 会检测到你的方法。

    【讨论】:

      【解决方案3】:

      加上将方法放在服务器端(服务器根文件夹),我注意到字母名称对于加载三个调用方法很重要。 当我有下一个结构时,我遇到了同样的问题

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-12
        • 1970-01-01
        • 2022-01-07
        • 2019-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多