J'ai une application Node.js qui est un client http (pour le moment). Alors je fais:
var query = require('querystring').stringify(propertiesObject);
http.get(url + query, function(res) {
console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
Cela semble être un assez bon moyen d'y parvenir. Cependant, je suis un peu vexé de devoir faire le url + query
étape. Cela devrait être encapsulé par une bibliothèque commune, mais je ne le vois pas encore dans la bibliothèque http
du nœud et je ne suis pas sûr du paquet npm standard qui pourrait le faire. Y a-t-il un moyen raisonnablement largement utilisé qui est meilleur?
La méthode rl.format enregistre le travail de construction de sa propre URL. Mais idéalement, la demande sera également de niveau supérieur.
Découvrez le module request .
Il est plus complet que le client http intégré du noeud.
var request = require('request');
var propertiesObject = { field1:'test1', field2:'test2' };
request({url:url, qs:propertiesObject}, function(err, response, body) {
if(err) { console.log(err); return; }
console.log("Get response: " + response.statusCode);
});
Si vous ne souhaitez pas utiliser de package externe, ajoutez simplement la fonction suivante dans vos utilitaires:
var params=function(req){
let q=req.url.split('?'),result={};
if(q.length>=2){
q[1].split('&').forEach((item)=>{
try {
result[item.split('=')[0]]=item.split('=')[1];
} catch (e) {
result[item.split('=')[0]]='';
}
})
}
return result;
}
Ensuite, dans createServer
rappel, ajoutez l'attribut params
à request
objet:
http.createServer(function(req,res){
req.params=params(req); // call the function above ;
/**
* http://mysite/add?name=Ahmed
*/
console.log(req.params.name) ; // display : "Ahmed"
})
J'avais du mal à ajouter des paramètres de chaîne de requête à mon URL. Je ne pouvais pas le faire fonctionner avant de réaliser que je devais ajouter ?
à la fin de mon URL, sinon cela ne fonctionnera pas. C’est très important car cela vous évitera des heures de débogage, croyez-moi: y êtes allé ... faites-le .
Ci-dessous, un point de terminaison d’API simple qui appelle le API Open Weather et transmet APPID
, lat
et lon
comme paramètres de requête et renvoient les données météorologiques sous forme d'objet JSON
. J'espère que cela t'aides.
//Load the request module
var request = require('request');
//Load the query String module
var querystring = require('querystring');
// Load OpenWeather Credentials
var OpenWeatherAppId = require('../config/third-party').openWeather;
router.post('/getCurrentWeather', function (req, res) {
var urlOpenWeatherCurrent = 'http://api.openweathermap.org/data/2.5/weather?'
var queryObject = {
APPID: OpenWeatherAppId.appId,
lat: req.body.lat,
lon: req.body.lon
}
console.log(queryObject)
request({
url:urlOpenWeatherCurrent,
qs: queryObject
}, function (error, response, body) {
if (error) {
console.log('error:', error); // Print the error if one occurred
} else if(response && body) {
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
res.json({'body': body}); // Print JSON response.
}
})
})
Ou si vous souhaitez utiliser le module querystring
, apportez les modifications suivantes
var queryObject = querystring.stringify({
APPID: OpenWeatherAppId.appId,
lat: req.body.lat,
lon: req.body.lon
});
request({
url:urlOpenWeatherCurrent + queryObject
}, function (error, response, body) {...})
Pas besoin d'une bibliothèque tierce. Utilisez le noeud nodejs module d'URL pour créer une URL avec des paramètres de requête:
const requestUrl = url.parse(url.format({
protocol: 'https',
hostname: 'yoursite.com',
pathname: '/the/path',
query: {
key: value
}
}));
Faites ensuite la demande avec l'URL formatée. requestUrl.path
inclura les paramètres de la requête.
const req = https.get({
hostname: requestUrl.hostname,
path: requestUrl.path,
}, (res) => {
// ...
})