2011-11-01 20 views
75

Pytanie jest dość proste. Chcę używać serwera Node.js jako serwera proxy do rejestrowania, uwierzytelniania i przesyłania dalej zapytań HTTP do serwera HTTP zaplecza (żądania PUT, GET i DELETE).Jak wykonać zewnętrzne żądania HTTP za pomocą Node.js

Jakiej biblioteki należy użyć do tego celu? Obawiam się, że nie mogę go znaleźć.

Odpowiedz

121

NodeJS obsługuje http.request jako standardowego modułu: 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); 
}); 
+10

Polecam dodanie 'resp.setEncoding ('utf8');' (lub innego rodzaju kodowania, którego używasz), aby uzyskać dane jako ciągi utf8. Jeśli dobrze zrozumiałem, w przeciwnym razie otrzymasz obiekty bufora i mogą mieć problemy ze znakami wielobajtowymi, jeśli znak wielobajtowy jest podzielony na dwie części. (Przez chwilę debugowałem związany z tym problem) – Touko

+7

Właściwie zacząłem używać modułu 'request' npm i wiele więcej. – chovy

0

Możesz użyć modułu http node.js, aby to zrobić. Możesz sprawdzić dokumentację pod numerem Node.js HTTP.

Należy również przekazać ciąg kwerendy do innego serwera HTTP. Powinieneś to mieć w ServerRequest.url.

Po uzyskaniu tych informacji, można przejść na serwerze backend HTTP i port w opcjach, że będzie dostarczyć w http.request()

7

chciałbym połączyć node-http-proxy i express.

węzeł-http-proxy obsługuje serwer proxy w serwerze WWW node.js poprzez RoutingProxy (patrz przykład o nazwie Żądania proxy w innym serwerze http).

Wewnątrz niestandardowej logiki serwera można wykonywać uwierzytelnianie za pomocą opcji ekspresowej. Zobacz auth sample here for an example.

Połączenie tych dwóch przykładów powinno dać ci to, co chcesz.

4

Możesz użyć wbudowanego modułu http, aby wykonać http.request().

Jednak jeśli chcesz, aby uprościć API można użyć modułu takich jak superagent

+3

Much saner api rzeczywiście. Nie obwiniam węzła za dostarczanie tylko niskiego poziomu API, ale rozpoczęcie obsługi porcji danych jest po prostu irytujące. –

1

node-http-proxy jest doskonałym rozwiązaniem, ponieważ został zaproponowany przez @hross powyżej. Jeśli nie wykorzystasz węzła, użyjemy NGINX, aby zrobić to samo. Działa bardzo dobrze z węzłem. Używamy go na przykład do przetwarzania żądań SSL przed przekazaniem ich do węzła. Może również obsługiwać trasy buforowania i przesyłania dalej. Yay!

7

Niedawno odkryto REQUESTIFY.

zamówienie Pobierz:

requestify.get('http://example.com').then(function(response) { 
    // Get the response body 
    response.getBody(); 
}); 

post do formatu JSON:

requestify.post('http://example.com', { 
     hello: 'world' 
    }) 
     .then(function(response) { 
      // Get the response body (JSON parsed or jQuery object for XMLs) 
      response.getBody(); 

      // Get the raw response body 
      response.body; 
     }); 

Nadzieja to pomaga

Powiązane problemy