Jak wysyłać zewnętrzne żądania HTTP za pomocą Node.js [zamknięte]

84

Pytanie jest dość proste. Chcę używać serwera Node.js jako serwera proxy do rejestrowania, uwierzytelniania i przekazywania zapytań HTTP do serwera HTTP zaplecza (żądania PUT, GET i DELETE).

Z jakiej biblioteki mam skorzystać w tym celu? Obawiam się, że nie mogę znaleźć.

Pierre
źródło

Odpowiedzi:

136

NodeJS obsługuje http.request jako standardowy moduł: 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
źródło
10
Zalecałbym dodanie resp.setEncoding('utf8');(lub dowolnego kodowania, którego używasz), aby uzyskać dane jako ciągi utf8. Jeśli dobrze zrozumiałem, w przeciwnym razie otrzymasz obiekty Buffer i możesz mieć problemy ze znakami wielobajtowymi, jeśli znak wielobajtowy zostanie podzielony na dwie części. (Właśnie debugowałem na jakiś czas powiązany problem)
Touko
8
Właściwie zacząłem używać requestmodułu npm znacznie częściej.
chovy
7

Połączyłbym węzeł-http-proxy i express .

node-http-proxy będzie obsługiwać proxy wewnątrz twojego serwera sieciowego node.js za pośrednictwem RoutingProxy(zobacz przykład o nazwie Żądania proxy na innym serwerze http ).

Wewnątrz własnej logiki serwera możesz przeprowadzić uwierzytelnianie za pomocą usługi Express. Zobacz przykład autoryzacji tutaj, aby zobaczyć przykład .

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

hross
źródło
5

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

Jeśli jednak chcesz uprościć API, możesz użyć modułu takiego jak superagent

zło
źródło
3
Rzeczywiście, znacznie zdrowszy interfejs API. Nie obwiniam węzła za udostępnianie tylko niskopoziomowego interfejsu API, ale rozpoczęcie obsługi fragmentów danych jest po prostu denerwujące.
Laurent Bourgault-Roy
1

node-http-proxy to świetne rozwiązanie, jak sugerował @hross powyżej. Jeśli nie jesteś zbyt zajęty korzystaniem z węzła, używamy NGINX do tego samego. Działa naprawdę dobrze z node. Używamy go na przykład do przetwarzania żądań SSL przed przekazaniem ich do węzła. Może również obsługiwać buforowanie i przekazywanie tras. Yay!

Jamund Ferguson
źródło
0

Możesz do tego użyć modułu http node.js. Możesz sprawdzić dokumentację w Node.js HTTP .

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

Po uzyskaniu tych informacji możesz przekazać serwer HTTP zaplecza i port w opcjach, które podasz w http.request()

momo
źródło