Comment puis-je faire une requête HTTP depuis Node.js ou Express.js? J'ai besoin de me connecter à un autre service. J'espère que l'appel est asynchrone et que le rappel contient la réponse du serveur distant.
la source
Comment puis-je faire une requête HTTP depuis Node.js ou Express.js? J'ai besoin de me connecter à un autre service. J'espère que l'appel est asynchrone et que le rappel contient la réponse du serveur distant.
Voici un extrait de code d'un échantillon du mien. Il est asynchrone et renvoie un objet JSON. Il peut faire n'importe quelle forme de demande GET.
Notez qu'il existe des moyens plus optimaux (juste un échantillon) - par exemple, au lieu de concaténer les morceaux que vous avez mis dans un tableau et de le joindre, etc.
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();
};
Il est appelé en créant un objet d'options comme:
const options = {
host: 'somesite.com',
port: 443,
path: '/some/path',
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
};
Et en fournissant une fonction de rappel.
Par exemple, dans un service, j'ai besoin du module REST ci-dessus, puis procédez comme suit:
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);
});
Si vous recherchez async
/ await
(linéaire, pas de rappel), des promesses, la prise en charge du temps de compilation et intellisense, nous avons créé un client HTTP et REST léger qui correspond à cette facture:
Essayez d'utiliser la
http.get(options, callback)
fonction simple dans node.js:Il existe également une
http.request(options, callback)
fonction générale qui vous permet de spécifier la méthode de demande et d'autres détails de la demande.la source
GET
requête si j'ai cette URL?graph.facebook.com/debug_token? input_token={token-to-inspect} &access_token={app-token-or-admin-token}
?Request et Superagent sont de très bonnes bibliothèques à utiliser.
note: la demande est obsolète , utilisez à vos risques et périls!
Utilisation
request
:la source
Vous pouvez également utiliser Requestify , un client HTTP vraiment cool et très simple que j'ai écrit pour nodeJS +, il prend en charge la mise en cache.
Procédez simplement comme suit pour la demande de méthode GET:
la source
Cette version est basée sur la fonction initialement proposée par bryanmac qui utilise des promesses, une meilleure gestion des erreurs, et est réécrite dans ES6.
En conséquence, vous n'avez pas à passer une fonction de rappel, mais getJSON () renvoie une promesse. Dans l'exemple suivant, la fonction est utilisée à l'intérieur d'un gestionnaire d'itinéraire ExpressJS
En cas d'erreur, il délègue l'erreur au middleware de gestion des erreurs du serveur.
la source
get
définition d'itinéraire Express , ce qui manque à de nombreux articles ici.Unirest est la meilleure bibliothèque que j'ai rencontrée pour faire des requêtes HTTP à partir de Node. Il vise à être un framework multiplateforme, donc apprendre comment cela fonctionne sur Node vous sera utile si vous devez également utiliser un client HTTP sur Ruby, PHP, Java, Python, Objective C, .Net ou Windows 8. Pour autant que je sache, les bibliothèques unirest sont principalement soutenues par des clients HTTP existants (par exemple sur Java, le client HTTP Apache, sur Node, la bibliothèque Request de Mikeal ) - Unirest met simplement une API plus agréable au sommet.
Voici quelques exemples de code pour Node.js:
Vous pouvez accéder directement à la documentation Node ici
la source
Découvrez shred . C'est un client HTTP de nœud créé et maintenu par spire.io qui gère les redirections, les sessions et les réponses JSON. C'est idéal pour interagir avec les API de repos. Consultez cet article de blog pour plus de détails.
la source
Consultez httpreq : c'est une bibliothèque de nœuds que j'ai créée parce que j'étais frustré qu'il n'y ait pas de module http GET ou POST simple ;-)
la source
Si vous avez juste besoin de faire des requêtes get simples et que vous n'avez pas besoin de support pour d'autres méthodes HTTP, jetez un œil à: simple-get :
la source
Utilisez reqclient : non conçu à des fins de script comme
request
ou de nombreuses autres bibliothèques. Reqclient permet dans le constructeur de spécifier de nombreuses configurations utiles lorsque vous devez réutiliser la même configuration encore et encore: URL de base, en-têtes, options d'authentification, options de journalisation, mise en cache, etc. Analyse JSON, etc.La meilleure façon d'utiliser la bibliothèque est de créer un module pour exporter l'objet pointant vers l'API et les configurations nécessaires pour se connecter:
Module
client.js
:Et dans les contrôleurs où vous devez consommer l'API, utilisez comme ceci:
reqclient
prend en charge de nombreuses fonctionnalités, mais certaines d'entre elles ne sont pas prises en charge par d'autres bibliothèques: intégration OAuth2 et intégration de l'enregistreur avec la syntaxe cURL , et renvoie toujours des objets Promise natifs.la source
Si jamais vous avez besoin d'envoyer une
GET
demande à unIP
ainsi qu'à unDomain
(d'autres réponses n'ont pas mentionné que vous pouvez spécifier uneport
variable), vous pouvez utiliser cette fonction:Ne manquez pas d'exiger des modules en haut de votre fichier:
N'oubliez pas que vous pouvez utiliser le
https
module pour communiquer sur un réseau sécurisé. donc ces deux lignes changeraient:la source
la source