Jak mogę złożyć żądanie HTTP z Node.js lub Express.js? Muszę połączyć się z inną usługą. Mam nadzieję, że połączenie jest asynchroniczne i że wywołanie zwrotne zawiera odpowiedź zdalnego serwera.
źródło
Jak mogę złożyć żądanie HTTP z Node.js lub Express.js? Muszę połączyć się z inną usługą. Mam nadzieję, że połączenie jest asynchroniczne i że wywołanie zwrotne zawiera odpowiedź zdalnego serwera.
Oto fragment kodu z mojej próbki. Jest asynchroniczny i zwraca obiekt JSON. Może wykonać dowolną formę żądania GET.
Zauważ, że istnieją bardziej optymalne sposoby (tylko próbka) - na przykład, zamiast łączyć fragmenty, które wkładasz do tablicy i dołączasz do niej itp. Mam nadzieję, że zaczniesz we właściwym kierunku:
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();
};
Jest to wywoływane przez utworzenie obiektu opcji, takiego jak:
const options = {
host: 'somesite.com',
port: 443,
path: '/some/path',
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
};
I zapewniając funkcję oddzwaniania.
Na przykład w usłudze wymagam powyższego modułu REST, a następnie wykonaj następujące czynności:
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);
});
Jeśli szukasz async
/ await
(liniowy, bez oddzwaniania), obietnic, wsparcia czasu kompilacji i intellisense, stworzyliśmy lekkiego klienta HTTP i REST, który pasuje do tego rachunku:
Spróbuj użyć prostej
http.get(options, callback)
funkcji w node.js:Istnieje również ogólna
http.request(options, callback)
funkcja, która pozwala określić metodę żądania i inne szczegóły żądania.źródło
GET
żądania, jeśli mam ten adres URL?graph.facebook.com/debug_token? input_token={token-to-inspect} &access_token={app-token-or-admin-token}
?Request i Superagent to całkiem niezłe biblioteki do użycia.
Uwaga: prośba jest wycofana , użyj na własne ryzyko!
Używanie
request
:źródło
Możesz także użyć Requestify , naprawdę fajnego i bardzo prostego klienta HTTP, który napisałem dla nodeJS +, który obsługuje buforowanie.
Po prostu wykonaj następujące czynności dla żądania metody GET:
źródło
Ta wersja jest oparta na pierwotnie zaproponowanej przez bryanmac funkcji, która wykorzystuje obietnice, lepszą obsługę błędów i została przepisana w ES6.
W rezultacie nie musisz przekazywać funkcji wywołania zwrotnego, zamiast tego getJSON () zwraca obietnicę. W poniższym przykładzie funkcja jest używana w module obsługi trasy ExpressJS
W przypadku błędu deleguje błąd do oprogramowania pośredniego obsługującego błędy serwera.
źródło
get
definicji trasy ekspresowej , której brakuje tutaj wielu postów.Unirest to najlepsza biblioteka, z jaką się spotkałem, aby wysyłać żądania HTTP z węzła. Jego celem jest bycie platformą wieloplatformową, więc nauczenie się, jak działa na Node, będzie ci dobrze służyć, jeśli będziesz musiał używać klienta HTTP w Ruby, PHP, Java, Python, Objective C, .Net lub Windows 8. O ile mogę stwierdzić, biblioteki unirest są w większości wspierane przez istniejących klientów HTTP (np. W Javie, kliencie HTTP Apache, w węźle, bibliotece żądania Mikeala ) - Unirest po prostu umieszcza ładniejszy API na wierzchu.
Oto kilka przykładów kodu dla Node.js:
Możesz przejść bezpośrednio do dokumentów węzła tutaj
źródło
Sprawdź niszczenie . Jest to węzłowy klient HTTP utworzony i obsługiwany przez spire.io, który obsługuje przekierowania, sesje i odpowiedzi JSON. Jest świetny do interakcji z pozostałymi interfejsami API. Zobacz ten post na blogu, aby uzyskać więcej informacji.
źródło
Sprawdź httpreq : to biblioteka węzłów, którą utworzyłem, ponieważ byłem sfrustrowany, że nie było tam prostego modułu HTTP GET ani POST ;-)
źródło
Jeśli potrzebujesz tylko prostych żądań pobierania i nie potrzebujesz obsługi innych metod HTTP, spójrz na: simple-get :
źródło
Użyj reqclient : nieprzeznaczony do celów skryptowych, takich jak
request
wiele innych bibliotek. Reqclient pozwala konstruktorowi na określenie wielu konfiguracji przydatnych, gdy trzeba wielokrotnie używać tej samej konfiguracji: podstawowy adres URL, nagłówki, opcje uwierzytelniania, opcje rejestrowania, buforowanie itp. Posiada również przydatne funkcje, takie jak analizowanie zapytań i adresów URL, automatyczne kodowanie zapytań i Parsowanie JSON itp.Najlepszym sposobem korzystania z biblioteki jest utworzenie modułu do wyeksportowania obiektu wskazującego na interfejs API oraz niezbędnych konfiguracji do połączenia z:
Moduł
client.js
:A w kontrolerach, w których musisz korzystać z interfejsu API, użyj następującego:
reqclient
obsługuje wiele funkcji, ale ma takie, które nie są obsługiwane przez inne biblioteki: integracja OAuth2 i integracja rejestratora ze składnią cURL i zawsze zwraca natywne obiekty Promise.źródło
Jeśli kiedykolwiek będziesz musiał wysłać
GET
zapytanie do (IP
a także wDomain
innych odpowiedziach nie wspomniano, że możesz podaćport
zmienną), możesz skorzystać z tej funkcji:Nie przegap wymaganych modułów na górze pliku:
Pamiętaj również, że możesz używać
https
modułu do komunikacji przez zabezpieczoną sieć. więc te dwie linie zmieniłyby się:źródło
źródło