Wie kann ich eine HTTP-Anfrage in Node.js oder Express.js stellen? Ich muss mich mit einem anderen Dienst verbinden. Ich hoffe, dass der Anruf asynchron ist und dass der Rückruf die Antwort des Remote-Servers enthält.
quelle
Wie kann ich eine HTTP-Anfrage in Node.js oder Express.js stellen? Ich muss mich mit einem anderen Dienst verbinden. Ich hoffe, dass der Anruf asynchron ist und dass der Rückruf die Antwort des Remote-Servers enthält.
Hier ist ein Ausschnitt eines Codes aus einem Beispiel von mir. Es ist asynchron und gibt ein JSON-Objekt zurück. Es kann jede Form von GET-Anfrage ausführen.
Beachten Sie, dass es optimalere Möglichkeiten gibt (nur ein Beispiel) - zum Beispiel, anstatt die Chunks, die Sie in ein Array eingefügt und verknüpft haben, zu verketten usw. Hoffentlich können Sie damit in die richtige Richtung starten:
const http = require('http');
const https = require('https');
/**
* getJSON: RESTful GET request returning JSON object(s)
* @param options: http options object
* @param callback: callback to pass the results JSON object(s) back
*/
module.exports.getJSON = (options, onResult) => {
console.log('rest::getJSON');
const port = options.port == 443 ? https : http;
let output = '';
const req = port.request(options, (res) => {
console.log(`${options.host} : ${res.statusCode}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
output += chunk;
});
res.on('end', () => {
let obj = JSON.parse(output);
onResult(res.statusCode, obj);
});
});
req.on('error', (err) => {
// res.send('error: ' + err.message);
});
req.end();
};
Es wird aufgerufen, indem ein Optionsobjekt wie folgt erstellt wird:
const options = {
host: 'somesite.com',
port: 443,
path: '/some/path',
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
};
Und Bereitstellung einer Rückruffunktion.
Zum Beispiel benötige ich in einem Service das obige REST-Modul und mache dann Folgendes:
rest.getJSON(options, (statusCode, result) => {
// I could work with the resulting HTML/JSON here. I could also just return it
console.log(`onResult: (${statusCode})\n\n${JSON.stringify(result)}`);
res.statusCode = statusCode;
res.send(result);
});
Wenn Sie nach async
/ await
(linear, kein Rückruf), Versprechungen, Unterstützung bei der Kompilierungszeit und Intellisense suchen, haben wir einen leichtgewichtigen HTTP- und REST-Client erstellt, der genau zu dieser Rechnung passt:
Versuchen Sie es mit der einfachen
http.get(options, callback)
Funktion in node.js:Es gibt auch eine allgemeine
http.request(options, callback)
Funktion , mit der Sie die Anforderungsmethode und andere Anforderungsdetails angeben können.quelle
GET
Anfrage verwenden, wenn ich diese URL habe?graph.facebook.com/debug_token? input_token={token-to-inspect} &access_token={app-token-or-admin-token}
?Request und Superagent sind ziemlich gute Bibliotheken.
Hinweis: Anfrage ist veraltet , Verwendung auf eigenes Risiko!
Verwenden von
request
:quelle
Sie können auch Requestify verwenden , einen wirklich coolen und sehr einfachen HTTP-Client, den ich für nodeJS + geschrieben habe und der das Caching unterstützt.
Führen Sie für die Anforderung der GET-Methode einfach Folgendes aus:
quelle
Diese Version basiert auf der ursprünglich von bryanmac vorgeschlagenen Funktion, die Versprechen und eine bessere Fehlerbehandlung verwendet und in ES6 neu geschrieben wurde.
Daher müssen Sie keine Rückruffunktion übergeben, sondern getJSON () gibt ein Versprechen zurück. Im folgenden Beispiel wird die Funktion in einem ExpressJS-Routenhandler verwendet
Bei einem Fehler wird der Fehler an die Middleware zur Behandlung von Serverfehlern delegiert.
quelle
get
Routendefinition gemacht wird, die vielen Posts hier fehlt.Unirest ist die beste Bibliothek, auf die ich gestoßen bin, um HTTP-Anfragen von Node zu stellen. Es soll ein Multiplattform-Framework sein. Wenn Sie also einen HTTP-Client unter Ruby, PHP, Java, Python, Objective C, .Net oder Windows 8 verwenden müssen, ist es hilfreich, zu lernen, wie es auf Node funktioniert. Soweit ich das beurteilen kann, werden die unirest-Bibliotheken hauptsächlich von vorhandenen HTTP-Clients unterstützt (z. B. auf Java, dem Apache-HTTP-Client, auf Node, Mikeals Request-Bibliothek ) - Unirest setzt lediglich eine schönere API ein.
Hier sind einige Codebeispiele für Node.js:
Sie können den Knoten docs gerade springen hier
quelle
Schauen Sie sich Shred an . Es handelt sich um einen von spire.io erstellten und verwalteten Knoten-HTTP-Client , der Weiterleitungen, Sitzungen und JSON-Antworten verarbeitet. Es ist großartig für die Interaktion mit Rest-APIs. Weitere Informationen finden Sie in diesem Blogbeitrag .
quelle
Check out httpreq : Es ist eine Knotenbibliothek, die ich erstellt habe, weil ich frustriert war, dass es kein einfaches http GET- oder POST-Modul gibt ;-)
quelle
Wenn Sie nur einfache Get-Anfragen stellen müssen und keine Unterstützung für andere HTTP-Methoden benötigen, schauen Sie sich Folgendes an: simple-get :
quelle
Verwenden Sie reqclient : Nicht für Skriptzwecke wie
request
oder viele andere Bibliotheken konzipiert. Mit Reqclient können im Konstruktor viele Konfigurationen angegeben werden, die nützlich sind, wenn Sie dieselbe Konfiguration immer wieder verwenden müssen: Basis-URL, Header, Authentifizierungsoptionen, Protokollierungsoptionen, Caching usw. Enthält nützliche Funktionen wie Abfrage- und URL-Analyse, automatische Abfragecodierung und JSON-Analyse usw.Die Bibliothek kann am besten mit einem Modul erstellt werden, um das auf die API verweisende Objekt und die erforderlichen Konfigurationen für die Verbindung zu exportieren:
Modul
client.js
:Und in den Controllern, in denen Sie die API verwenden müssen, verwenden Sie Folgendes:
reqclient
unterstützt viele Funktionen, hat jedoch einige, die von anderen Bibliotheken nicht unterstützt werden: OAuth2-Integration und Logger-Integration mit cURL-Syntax und gibt immer native Promise-Objekte zurück.quelle
Wenn Sie jemals eine
GET
Anfrage an eineIP
oder eine senden müssenDomain
(andere Antworten haben nicht erwähnt, dass Sie eineport
Variable angeben können), können Sie diese Funktion verwenden:Verpassen Sie nicht, Module oben in Ihrer Datei zu benötigen:
Denken Sie auch daran, dass Sie das
https
Modul für die Kommunikation über ein gesichertes Netzwerk verwenden können. Also würden sich diese beiden Zeilen ändern:quelle
quelle