2016-08-08 60 views
0

Ich arbeite an einer Meteor-Anwendung, die in der Lage sein muss, POST-Anfragen von einer externen API zu hören. Um dies zu tun, versuche ich einen Webhook zu implementieren, bei dem die API Daten senden kann, die später in einer Sammlung gespeichert werden.Meteor-Routing-Problem: Webhook zurückkehrende HTML-Seite

Ich habe jedoch Probleme beim Konfigurieren der Route und POST eine grundlegende Kopfzeile und Nachricht.

Mein Code (in /lib/routes.js):

if(Meteor.isClient){ 
Router.route('/webhook', function(){ 

     var request = this.request; 

     console.log("hook called"); 
     console.log("headers: ", request.headers); 
     console.log("data: ", request.body); 

     this.response.writeHead(200, {'content-type': 'text/html'}); 
     this.response.write("You wrote: " + request.body); 
     this.response.write("\n"); 

     this.response.end('Success!\n'); 
    }, {where: 'server'}); 
} 

Meine Anfrage:

curl -H "Content-Type: application/json" -d '{"message":"foo"}' http://localhost:3000/webhook 

Die Antwort, die ich in der Konsole ist eine große HTML-Seite, die nichts um mit der Anfrage zu tun ...

Irgendwelche Ideen, wo ich einen Fehler gemacht habe?

Vielen Dank im Voraus für Ihre Hilfe!

Greg

Hinweis: wenn ich den if(Meteor.isClient){...} Teil entfernen, die ich erhalten:

Error: Meteor.userId can only be invoked in method calls. Use this.userId in publish functions.

Antwort

0

Durch das Hinzufügen der {where: 'server'} Option auf Ihrer Route Config, du bist Eisen Router zu sagen, dass dies ein Serverseitige Route. Dies bedeutet, dass die Route nur auf dem Server verfügbar ist. Das Einschließen dieser Routendefinition in eine Meteor.isClient Prüfung bedeutet, dass die Route nur definiert wird, wenn sie auf der Client-Seite läuft (z.B. innerhalb eines Benutzer-Browsers). Sie können auf der Clientseite keine serverseitige Route definieren. Entfernen Sie daher die Meteor.isClient Prüfung.

In Bezug auf die Meteor.userId Fehler sind immer bereit wenn Sie die Meteor.isClient Prüfung zu entfernen, sind die beiden nicht im Zusammenhang wahrscheinlich (da Sie Meteor.userId überall in der Probe nicht sind Referenzierung Sie auf dem Laufenden). Deaktivieren Sie alle anderen Teile Ihrer Router-Konfiguration und testen Sie diesen Webhook selbst. es funktioniert wie erwartet (nach dem Entfernen Meteor.isClient).

+0

Ich entfernte die Meteor.isClient Prüfung, und hatte immer noch den Fehler. Wenn ich diesen Weg nur beibehalten würde, würde es richtig funktionieren, wie du gesagt hast! Ich reparierte den ganzen Fräser, indem ich einen! Meteor.isServer Scheck zu allen Meteor.userId() Anrufen hinzufügte, die ich in meinem Fräser hatte, und es funktionierte tadellos! Danke für deine Einsicht, ich verstehe besser, wie das Ganze jetzt funktioniert. – Greg