Server stürzt bei HTTP.call mit Meteor + nicht übereinstimmenden asynchronen Ergebnissen ab

Ich erhalte zwei sehr seltsame Ergebnisse beim Versuch, einige grundlegende GET-Aufrufe mit der HTTP-Bibliothek von Meteor durchzuführen.

Diese Anforderungen funktionieren auch mit Curl und Python, sodass sie nicht auf der Seite der API liegen.

1. Ergebnis stimmt nicht mit Ergebnis von asynchronem Rückruf @ übere

Ich verwende den folgenden Code in meinen Meteor-Methoden:

//snip! Meteor methods continued above. 

  getEmails: function(authId, threadId){
  result = HTTP.get("https://api.nylas.com/threads", {auth:authId}, function(error, result){
    console.log(result);
  });
  return result
}

Mit den Chrome-Entwicklertools kann ich das zurückgegebene Objekt untersuchen.

Object {statusCode: 401, content: "{↵  "message": "Could not verify access credential.",↵  "type": "invalid_request_error"↵}", headers: Object, data: Object}content: "{↵  "message": "Could not verify access credential.",↵  "type": "invalid_request_error"↵}"data: Objectheaders: ObjectstatusCode: 401__proto__: Object

Now hier ist der seltsame Teil: Beachten Sie, dass ich auch eine console.log im asynchronen Rückruf habe. Diese Ausgabe auf dem Server gibt tatsächlich die Daten zurück, die ich von einem korrekten API-Aufruf erwarten würde!

Es ist etwas langwierig und persönlich zu posten, aber es gibt den Status 200 zurück.

2. Die Verwendung von params im Anruf stürzt meinen Server ab

Dies ist eine Kopie des obigen Codes mit einer geringfügigen Änderung (einschließlich der Parameteroptionen).

//snip! Meteor methods continued above. 

  getEmails: function(authId, threadId){
  result = HTTP.get("https://api.nylas.com/threads", {params:{id:threadId}}, {auth:authId}, function(error, result){
    console.log(result);
  });
  return result
}

Wenn ich diese Änderung vornehme, stürzt der Meteor-Server jedes Mal ab, wenn ich diese Methode aufrufe.

Das wird in den Chrome-Entwicklertools gedruckt:

Exception while simulating the effect of invoking 'getEmails' Error: Can't make a blocking HTTP call from the client; callback required.(…) Error: Can't make a blocking HTTP call from the client; callback required.

Und hier ist, was ich auf dem Server sehe:

TypeError: object is not a function
W20151110-20:52:42.024(-8)? (STDERR)     at    packages/http/httpcall_server.js:74:1

W20151110-20:52:42.024(-8)? (STDERR)     at packages/underscore/underscore.js:750:1

W20151110-20:52:42.025(-8)? (STDERR)     at Request._callback (packages/http/httpcall_server.js:116:1)
W20151110-20:52:42.025(-8)? (STDERR)     at Request.self.callback  (/Users/max/.meteor/packages/http/.1.1.1.murctg++os+web.browser+web.cordova/npm/node_modules/request/request.js:344:22)
W20151110-20:52:42.025(-8)? (STDERR)     at Request.emit (events.js:98:17)
W20151110-20:52:42.025(-8)? (STDERR)     at Request.<anonymous> (/Users/max/.meteor/packages/http/.1.1.1.murctg++os+web.browser+web.cordova/npm/node_modules/request/request.js:1239:14)
W20151110-20:52:42.026(-8)? (STDERR)     at Request.emit (events.js:117:20)
W20151110-20:52:42.026(-8)? (STDERR)     at IncomingMessage.<anonymous> (/Users/max/.meteor/packages/http/.1.1.1.murctg++os+web.browser+web.cordova/npm/node_modules/request/request.js:1187:12)
W20151110-20:52:42.027(-8)? (STDERR)     at IncomingMessage.emit (events.js:117:20)
W20151110-20:52:42.027(-8)? (STDERR)     at _stream_readable.js:944:16

Das scheint alles sehr einfach zu sein, also bin ich überrascht, dass es nicht funktioniert.

Was fehlt mir, das all diese Probleme verursacht?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage