2016-07-31 35 views
0

Ich verwende das Typeform webhook feature, um Ergebnisse zu JSON zu generieren, wenn jemand die Schaltfläche Senden auf der eingebetteten Umfrage trifft, und ich bekomme die Ergebnisse genau wie in der Dokumentation beschrieben, wenn ich einen Dienst verwende wie RequestBin, aber wenn ich meine lokalen App belichten über den Befehl ngrokProbleme Parsing roher Körper von Typforms Webhook

ngrok http 3000 

und dann die zugrunde liegende Route als die Webhook Ziel-URL, ich unbefriedigenden Ausgang erhalten. Hier ist die Strecke in Express:

app.post('/receiveWebhook', function(req, res){ 
    console.log(req); 
    console.log(req.title); 
    res.send(200); 
}); 

, die die serverseitige Ausgabe liefert:

IncomingMessage { 
    _readableState: 
     ReadableState { 
      objectMode: false, 
      highWaterMark: 16384, 
      buffer: [], 
      length: 0, 
      pipes: null, 
      pipesCount: 0, 
      flowing: null, 
      ended: false, 
      endEmitted: false, 
      reading: false, 
      sync: true, 
      needReadable: false, 
      emittedReadable: false, 
      .... 
     body: {}, 
     params: {}, 
     ... 
     (can post the entire contents on Dropbox if comments think it is necessary) 

Wenn ich die Strecke getroffen Postman mit interessanterweise die einzige Ausgabe in der Rohkarosse ist:

{"title": "Test"} 

, die von den console.log Aussagen in der Express-Route nicht validiert ich oben geschrieben.

Irgendwelche Gedanken darüber, warum soll ich Nutzdaten durch RequestBin werden empfangen, aber nicht auf der tatsächlichen Server-Seite meiner lokalen app werden erhalten?

Antwort

2

Es scheint, wie Sie die Anforderung falsch verwenden (in Express). Die Typeform Webhook wird die Ergebnisse als Körper des Antrags haben, so dass Sie body-parser verwenden müssen die korrekten Daten zu erhalten. hier

Werfen Sie einen Blick: https://github.com/TypeformIO/SimpleLiveReports/blob/master/index.js

Die wichtigen Bits:

Fügen Sie Körper-Parser

var bodyParser = require('body-parser')

Verwenden Sie es als Middleware

app.use(bodyParser.json());

Verwenden req.body die Daten zu verwenden, zum Beispiel:

app.post('/receive_results', function handleReceiveResults(req, res) { console.log('Got results!'); var body = req.body; saveAnswers(body.token, body.answers, body.uid); res.send('Ok!'); });

Mit dieser Einrichtung req.body die Ergebnisse der Vorlage enthalten soll. Lassen Sie mich wissen, ob es funktioniert immer noch nicht!