Voici un extrait du code d'un de mes échantillons. Il est asynchrone et renvoie un objet JSON. Il peut faire n'importe quelle forme de requête GET.
Notez qu'il existe des méthodes plus optimales (juste un exemple) - par exemple, au lieu de concaténer les morceaux, vous les mettez dans un tableau et vous les joignez, etc... Avec un peu de chance, cela vous met sur la bonne voie :
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();
};
On l'appelle en créant un objet 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, je demande le module REST ci-dessus et je fais ensuite ceci :
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);
});
UPDATE
Si vous êtes à la recherche de async
/ await
(linéaire, sans callback), les promesses, le support de la compilation et l'intellisense, nous avons créé un client HTTP et REST léger qui correspond à ce projet :
Microsoft typed-rest-client
0 votes
Dans Node.js 18, l'API fetch est disponible par défaut sur la portée globale. stackoverflow.com/questions/6158933/