Comment faire un appel REST distant dans Node.js? n’importe quel CURL?

Dans Node.js , à part l’utilisation d’un processus enfant pour effectuer un appel CURL , existe-t-il un moyen de faire l’appel CURL à l’API REST du serveur distant et d’obtenir les données de retour?

Je dois également configurer l’en-tête de la requête sur l’appel REST distant, ainsi que sur la requête dans GET (ou POST).

Je trouve celui-ci: http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs

mais il ne montre aucun moyen de chaîne de requête POST.

Related of "Comment faire un appel REST distant dans Node.js? n’importe quel CURL?"

Regardez http.request

 var options = { host: url, port: 80, path: '/resource?id=foo&bar=baz', method: 'POST' }; http.request(options, function(res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.ssortingngify(res.headers)); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('BODY: ' + chunk); }); }).end(); 

Comment utiliser Request – Client HTTP simplifié .

Voici un GET:

 var request = require('request'); request('http://www.google.com', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) // Print the google web page. } }) 

OP voulait aussi un POST:

 request.post('http://service.com/upload', {form:{key:'value'}}) 

Regardez http://isolasoftware.it/2012/05/28/call-rest-api-with-node-js/

 var https = require('https'); /** * HOW TO Make an HTTP Call - GET */ // options for GET var optionsget = { host : 'graph.facebook.com', // here only the domain name // (no http/https !) port : 443, path : '/youscada', // the rest of the url with parameters if needed method : 'GET' // do GET }; console.info('Options prepared:'); console.info(optionsget); console.info('Do the GET call'); // do the GET request var reqGet = https.request(optionsget, function(res) { console.log("statusCode: ", res.statusCode); // uncomment it for header details // console.log("headers: ", res.headers); res.on('data', function(d) { console.info('GET result:\n'); process.stdout.write(d); console.info('\n\nCall completed'); }); }); reqGet.end(); reqGet.on('error', function(e) { console.error(e); }); /** * HOW TO Make an HTTP Call - POST */ // do a POST request // create the JSON object jsonObject = JSON.ssortingngify({ "message" : "The web of things is approaching, let do some tests to be ready!", "name" : "Test message posted with node.js", "caption" : "Some tests with node.js", "link" : "http://www.youscada.com", "description" : "this is a description", "picture" : "http://soffr.miximages.com/rest/logo2.png", "actions" : [ { "name" : "youSCADA", "link" : "http://www.youscada.com" } ] }); // prepare the header var postheaders = { 'Content-Type' : 'application/json', 'Content-Length' : Buffer.byteLength(jsonObject, 'utf8') }; // the post options var optionspost = { host : 'graph.facebook.com', port : 443, path : '/youscada/feed?access_token=your_api_key', method : 'POST', headers : postheaders }; console.info('Options prepared:'); console.info(optionspost); console.info('Do the POST call'); // do the POST call var reqPost = https.request(optionspost, function(res) { console.log("statusCode: ", res.statusCode); // uncomment it for header details // console.log("headers: ", res.headers); res.on('data', function(d) { console.info('POST result:\n'); process.stdout.write(d); console.info('\n\nPOST completed'); }); }); // write the json data reqPost.write(jsonObject); reqPost.end(); reqPost.on('error', function(e) { console.error(e); }); /** * Get Message - GET */ // options for GET var optionsgetmsg = { host : 'graph.facebook.com', // here only the domain name // (no http/https !) port : 443, path : '/youscada/feed?access_token=you_api_key', // the rest of the url with parameters if needed method : 'GET' // do GET }; console.info('Options prepared:'); console.info(optionsgetmsg); console.info('Do the GET call'); // do the GET request var reqGet = https.request(optionsgetmsg, function(res) { console.log("statusCode: ", res.statusCode); // uncomment it for header details // console.log("headers: ", res.headers); res.on('data', function(d) { console.info('GET result after POST:\n'); process.stdout.write(d); console.info('\n\nCall completed'); }); }); reqGet.end(); reqGet.on('error', function(e) { console.error(e); }); 

J’utilise node-fetch parce qu’il utilise l’ API Fetch () familière (si vous êtes un développeur web ) . fetch () est la nouvelle façon de faire des requêtes HTTP arbitraires à partir du navigateur.

Oui, je sais que c’est une question de nœud, mais ne voulons-nous pas réduire le nombre de développeurs d’API qui doivent mémoriser et comprendre, et améliorer la réutilisation de notre code JavaScript? La récupération est une norme alors qu’en est-il de la convergence?

L’autre bonne chose à propos de fetch () est qu’elle renvoie une promesse javascript, vous pouvez donc écrire un code asynchrone comme ceci:

 let fetch = require('node-fetch'); fetch('http://localhost', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{}' }).then(response => { return response.json(); }).catch(err => {console.log(err);}); 

Fetch remplace XMLHTTPRequest . Voici quelques informations supplémentaires .

J’ai utilisé restler pour faire appel à webservices, fonctionne comme du charme et est plutôt chouette.

un autre exemple – vous devez installer le module de demande pour cela

 var request = require('request'); function get_trustyou(trust_you_id, callback) { var options = { uri : 'https://api.trustyou.com/hotels/'+trust_you_id+'/seal.json', method : 'GET' }; var res = ''; request(options, function (error, response, body) { if (!error && response.statusCode == 200) { res = body; } else { res = 'Not Found'; } callback(res); }); } get_trustyou("674fa44c-1fbd-4275-aa72-a20f262372cd", function(resp){ console.log(resp); }); 
 var http = require('http'); var url = process.argv[2]; http.get(url, function(response) { var finalData = ""; response.on("data", function (data) { finalData += data.toSsortingng(); }); response.on("end", function() { console.log(finalData.length); console.log(finalData.toSsortingng()); }); }); 

Je n’en ai trouvé aucun avec cURL, j’ai donc écrit un wrapper autour de node-libcurl et je peux le trouver à l’ adresse https://www.npmjs.com/package/vps-rest-client .

Pour faire un POST, c’est comme ça:

 var host = 'https://api.budgetvm.com/v2/dns/record'; var key = 'some___key'; var domain_id = 'some___id'; var rest = require('vps-rest-client'); var client = rest.createClient(key, { verbose: false }); var post = { domain: domain_id, record: 'test.example.net', type: 'A', content: '111.111.111.111' }; client.post(host, post).then(function(resp) { console.info(resp); if (resp.success === true) { // some action } client.close(); }).catch((err) => console.info(err)); 

Si vous avez Node.js 4.4+, jetez un oeil à reqclient , cela vous permet de passer des appels et de consigner les requêtes dans le style cURL , de sorte que vous pouvez facilement vérifier et reproduire les appels en dehors de l’application.

Renvoie les objects Promise au lieu de renvoyer des rappels simples, de sorte que vous pouvez gérer le résultat de manière plus “classique” , enchaîner facilement le résultat et gérer les erreurs de manière standard. Supprime également beaucoup de configurations standard à chaque requête: URL de base, délai d’attente, format de type de contenu, en-têtes par défaut, parameters et liaison de requête dans l’URL, et fonctionnalités de base du cache.

Voici un exemple d’initialisation, d’appel et de journalisation de l’opération avec un style curl :

 var RequestClient = require("reqclient").RequestClient; var client = new RequestClient({ baseUrl:"http://baseurl.com/api/", debugRequest:true, debugResponse:true}); client.post("client/orders", {"client": 1234, "ref_id": "A987"},{"x-token": "AFF01XX"}); 

Cela se connecte à la console …

 [Requesting client/orders]-> -X POST http://baseurl.com/api/client/orders -d '{"client": 1234, "ref_id": "A987"}' -H '{"x-token": "AFF01XX"}' -H Content-Type:application/json 

Et quand la réponse est renvoyée …

 [Response client/orders]< - Status 200 - {"orderId": 1320934} 

Voici un exemple de la manière de gérer la réponse avec l'object promis:

 client.get("reports/clients") .then(function(response) { // Do something with the result }).catch(console.error); // In case of error ... 

Bien sûr, il peut être installé avec: npm install reqclient .

Vous pouvez utiliser curlrequest pour définir facilement l’heure de la requête que vous souhaitez effectuer … vous pouvez même définir des en-têtes dans les options pour ” simuler ” un appel du navigateur.

Axios

Un exemple (axios_example.js) utilisant Axios dans Node.js:

 const axios = require('axios'); const express = require('express'); const app = express(); const port = process.env.PORT || 5000; app.get('/search', function(req, res) { let query = req.query.queryStr; let url = `https://your.service.org?query=${query}`; axios({ method:'get', url, auth: { username: 'the_username', password: 'the_password' } }) .then(function (response) { res.send(JSON.ssortingngify(response.data)); }) .catch(function (error) { console.log(error); }); }); var server = app.listen(port); 

Assurez-vous que dans votre répertoire de projet vous faites:

 npm init npm install express npm install axios node axios_example.js 

Vous pouvez ensuite tester l’API REST Node.js à l’aide de votre navigateur à l’ http://localhost:5000/search?queryStr=xxxxxxxxx

De même, vous pouvez faire du post, tel que:

 axios({ method: 'post', url: 'https://your.service.org/user/12345', data: { firstName: 'Fred', lastName: 'Flintstone' } }); 

SuperAgent

De même, vous pouvez utiliser SuperAgent.

 superagent.get('https://your.service.org?query=xxxx') .end((err, response) => { if (err) { return console.log(err); } res.send(JSON.ssortingngify(response.body)); }); 

Et si vous voulez faire l’authentification de base:

 superagent.get('https://your.service.org?query=xxxx') .auth('the_username', 'the_password') .end((err, response) => { if (err) { return console.log(err); } res.send(JSON.ssortingngify(response.body)); }); 

Ref: