route req node another node.js http query-string

req - post node.js express



node.js Solicitud http ''get'' con parĂ¡metros de cadena de consulta (3)

Tengo una aplicación Node.js que es un cliente http (en este momento). Así que estoy haciendo:

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); });

Esto parece ser una buena manera de lograr esto. Sin embargo, estoy un poco molesto de que tuve que hacer el paso de url + query . Esto debería ser encapsulado por una biblioteca común, pero aún no veo esto en la biblioteca http del nodo y no estoy seguro de qué paquete npm estándar podría lograrlo. ¿Hay una forma razonablemente ampliamente utilizada que sea mejor?

url.format método url.format guarda el trabajo de crear una URL propia. Pero idealmente, la solicitud será un nivel más alto que este también.


Echa un vistazo al módulo de request .

Es más completo que el cliente http incorporado en el nodo.

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); });


He estado luchando con cómo agregar parámetros de cadena de consulta a mi URL. No pude hacerlo funcionar hasta que me di cuenta de que necesitaba agregar ? al final de mi URL, de lo contrario no funcionará. Esto es muy importante ya que le ahorrará horas de depuración, créanme: he estado allí ... hecho eso .

A continuación, se encuentra un punto final de API simple que llama a la API de Open Weather y pasa APPID , lat y lon como parámetros de consulta y devuelve datos meteorológicos como un objeto JSON . Espero que esto ayude.

//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. } }) })

O si desea utilizar el módulo de querystring , realice los cambios siguientes

var queryObject = querystring.stringify({ APPID: OpenWeatherAppId.appId, lat: req.body.lat, lon: req.body.lon }); request({ url:urlOpenWeatherCurrent + queryObject }, function (error, response, body) {...})


Si no desea utilizar un paquete externo, simplemente agregue la siguiente función en sus utilidades:

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; }

Luego, en la devolución de llamada de createServer , agregue params atributo para request objeto:

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" })