2013-07-27 27 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中按照字母順序的單詞進行了定義。

相關問題