So stellen Sie externe HTTP-Anforderungen mit Node.js [geschlossen]

84

Die Frage ist ziemlich einfach. Ich möchte einen Node.js-Server als Proxy verwenden, um HTTP-Abfragen zu protokollieren, zu authentifizieren und an einen Back-End-HTTP-Server weiterzuleiten (PUT-, GET- und DELETE-Anforderungen).

Welche Bibliothek soll ich für diesen Zweck verwenden? Ich fürchte, ich kann keinen finden.

Pierre
quelle

Antworten:

136

NodeJS unterstützt http.request als Standardmodul: http://nodejs.org/docs/v0.4.11/api/http.html#http.request

var http = require('http');

var options = {
  host: 'example.com',
  port: 80,
  path: '/foo.html'
};

http.get(options, function(resp){
  resp.on('data', function(chunk){
    //do something with chunk
  });
}).on("error", function(e){
  console.log("Got error: " + e.message);
});
chovy
quelle
10
Ich würde empfehlen resp.setEncoding('utf8');, Daten (oder die von Ihnen verwendete Codierung) hinzuzufügen , um Daten als utf8-Zeichenfolgen abzurufen. Wenn ich es richtig verstanden habe, erhalten Sie sonst Pufferobjekte und haben möglicherweise Probleme mit Mehrbytezeichen, wenn ein Mehrbytezeichen in zwei Teile aufgeteilt wird. (Nur ein verwandtes Problem für eine Weile debuggt)
Touko
8
Ich habe tatsächlich requestviel mehr mit dem npm-Modul angefangen .
Chovy
7

Ich würde Node-http-Proxy und Express kombinieren .

node-http-proxy unterstützt einen Proxy innerhalb Ihres node.js-Webservers über RoutingProxy(siehe das Beispiel Proxy-Anforderungen auf einem anderen http-Server ).

Innerhalb Ihrer benutzerdefinierten Serverlogik können Sie die Authentifizierung mit Express durchführen. Ein Beispiel finden Sie hier im Auth-Beispiel .

Die Kombination dieser beiden Beispiele sollte Ihnen das geben, was Sie wollen.

hross
quelle
5

Sie können das eingebaute httpModul verwenden, um eine http.request().

Wenn Sie jedoch die API vereinfachen möchten, können Sie ein Modul wie Superagent verwenden

böser Schmuck
quelle
3
Viel saner api in der Tat. Ich beschuldige Node nicht, nur Low-Level-API bereitzustellen, aber es ist einfach ärgerlich, mit Datenblöcken zu beginnen.
Laurent Bourgault-Roy
1

Node-http-Proxy ist eine großartige Lösung, wie oben von @hross vorgeschlagen. Wenn Sie bei der Verwendung von Node nicht festgefahren sind, verwenden wir NGINX , um dasselbe zu tun. Es funktioniert sehr gut mit Knoten. Wir verwenden es beispielsweise, um SSL-Anforderungen zu verarbeiten, bevor sie an den Knoten weitergeleitet werden. Es kann auch Cache- und Weiterleitungsrouten verarbeiten. Yay!

Jamund Ferguson
quelle
0

Sie können dazu das http-Modul node.js verwenden. Sie können die Dokumentation unter Node.js HTTP überprüfen .

Sie müssten die Abfragezeichenfolge auch an den anderen HTTP-Server übergeben. Sie sollten das in ServerRequest.url haben .

Sobald Sie diese Informationen haben, können Sie den Back-End-HTTP-Server übergeben und die Optionen portieren, die Sie im Internet bereitstellen http.request()

Momo
quelle