客户端中的Meteor调用服务器方法得到404方法未找到错误

时间:2013-07-27 15:36:28

标签: meteor

我是meteor的新手并且遇到试图在客户端上调用服务器方法的问题。

// 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中并仍然得到相同的错误。我错过了什么?

3 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:0)

Meteor.methods({...})放出Meteor.isServer(),然后Meteor会检测你的方法。

答案 2 :(得分:0)

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

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

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

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

未找到404,已修复。当我想要从模板中分离函数时,我在客户端找到了同样的问题,例如,将D3js函数与模板分开。您可能需要使用"下划线"确保字母加载的顶部。字符" _"。 考虑一下,因为这些示例工作得很好,因为这些方法在STARTUP.JS中以leat字母词定义。