2013-07-27 30 views
0

我是流星的新手,尝试在客户端调用服务器方法时遇到问题。客户端中的流星调用服务器方法找不到404方法错误

// 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并仍然得到同样的error.What我缺少什么?

回答

10

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

代码里面/client目录不会在服务器上运行所有,因此Meteor.isServer将永远是false和方法绝不会无论是客户端或服务器上创建

+0

对不起,延迟回复。它将代码移动到服务器文件夹时起作用。但是,Meteor.isServer又有什么意义呢? –

+1

它用于区分您将代码放在根目录(同时在服务器和客户端上运行)的位置。有时候你可能想分享相同的代码,但是在服务器和客户端之间做一些微小的调整。但是它不太可取,因为服务器端代码的副本将被发送到客户端,但它不会运行。 – Akshat

0

Meteor.methods({...})Meteor.isServer()然后流星将检测你的方法。

+0

尝试过,仍然收到相同的错误。 – tonyf

0

加上把方法放在服务器端(服务器根文件夹),我注意到按字母顺序命名它的重要加载三个调用方法。 我有同样的问题,当我有一个结构

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

然后,DHT-设置不看methods.js方法。相反,我改变文件的名称:

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

404未找到固定。我在客户端发现的一个问题是,想要从模板中分离函数,例如,将D3js函数从模板中分离出来。您可能需要使用“下划线”字符“_”确保按字母顺序排列的顶部。 请考虑一下,导致这些示例正常工作,因为这些方法在STARTUP.JS中按照字母顺序的单词进行了定义。

相关问题