2015-01-02 13 views
6

In Meteor ich diesen Fehler jeder für Methode, die ich auf der Client-Seite definieren:Fehler Aufruf Methode ‚‘: Die Methode wurde nicht gefunden [404]

Error invoking Method 'activeMenu': Method not found [404] 

Nur als Beispiel, in meinem Code habe ich definiert dieses Verfahren, etwa so:

/client/js/startup/methods.js

Meteor.methods({ 
    ... 
    activeMenu: function() { 
     if(Session.get('menu')) { 
      $('.menu').removeClass('active'); 
      $('#' + Session.get('menu')).addClass('active'); 
     } 
    }, 
    ... 
}); 

und von zwei Ort genannt wird - wenn die Anwendung zum ersten Mal gemacht bekommen, ein nd nach dem Router hat seine Routing:

client/js/rendered.js

Template.ApplicationLayout.rendered = function() { 
    Meteor.call('activeMenu'); 
} 

/client/js/utils/router.js

Router.onAfterAction(function() { 
    Meteor.call('activeMenu'); 
}); 

Jeder der Aufruf den Fehler hervorruft. Allerdings funktioniert die Methode immer noch, ich bekomme die Ergebnisse, die ich erwartet habe, also müssen die Anrufe erfolgreich gewesen sein, aber ich bekomme immer noch Fehler. Diese Methoden laufen nur auf der Client-Seite, da sie Präsentationszwecken dienen. Ich brauche das Programm, um fehlerfrei zu sein, weil ich vermute, dass das der Grund ist, warum spiderable nicht funktioniert.

Antwort

15

Sie haben nur die Stub-Methode, wenn Sie Meteor.methods Sie benötigen eine Methode auf der Serverseite, während die Client-Seite ist optional, Latenzkompensation zu simulieren.

Die Funktionsweise eines Meteor-Anrufs besteht darin, dass bei einem Anruf sofort die Clientseite ausgelöst wird, um einen UI-Effekt zu simulieren, während eine Antwort vom Server zurückgegeben wird. Anschließend wird der Serverruf ausgelöst.

Dies ist vorhanden, damit Sie eine Methode haben können, bei der die Antwort sofort erscheint, obwohl der Server tatsächlich Zeit braucht, um zu antworten.

Da Sie die entsprechenden Serverseite Methode nicht haben, wenn Meteor den Anruf an den Server sendet es kann sie nicht finden und antwortet mit dem Fehler Method not found [404]

Wenn Sie eine Methode haben wollen, wo nur die Client-Seite hat einen Effekt, den Sie stattdessen eine Standard-js-Methode verwenden sollte, ohne das var Schlüsselwort seine weltweit scoped zu gewährleisten (und kann von anderen Client-Seite Dateien zugegriffen werden)

activeMenu = function() { 
    if(Session.get('menu')) { 
     $('.menu').removeClass('active'); 
     $('#' + Session.get('menu')).addClass('active'); 
    } 
} 

dann in der anderen Code:

activeMenu() statt Meteor.call('activeMenu');

+1

Vielen Dank Akshat! Ich hatte ein großes Missverständnis darüber, was "Meteor.call()" ist, das hat es wirklich für mich geklärt! Danke, dass Sie sich die Zeit genommen haben, meine Frage so detailliert zu beantworten, und danke Ihnen für Ihre Zeit in all den anderen Antworten, die Sie ebenfalls geben. – dayuloli

1

Ich merke, dass die alphabetischen Namen ist es wichtig, drei Aufrufe Methode laden. ich hatte das gleiche Problem, wenn ich die nächste Struktur

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

Dann dht-Setup nicht die methods.js Methoden sehen.Stattdessen ändere ich den Namen der Datei:

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

Die 404 nicht gefunden, lösen. Das gleiche Problem, das ich auf der Client-Seite gefunden habe, wenn ich Funktionen von Vorlagen trennen möchte, zum Beispiel die D3js-Funktionen von den Vorlagen zu trennen. Sie müssen wahrscheinlich sicherstellen, oben auf die alphabetische Belastung mit "Unterstrich" Zeichen "_". Beachten Sie, dass die Beispiele gut funktionieren, weil die Methoden in STARTUP.JS definiert sind, zumindest in alphabetischer Reihenfolge.

+0

Es hätte auf keinen Fall funktionieren sollen, aber es hat funktioniert! Lol, was für eine verrückte Lösung. Vielen Dank. Habe es aufgehoben, um sicherzustellen, dass ich nicht verrückt bin, und ich nicht. –

Verwandte Themen