Node.js http 'get' запрос с параметрами строки запроса
У меня есть приложение Node.js, которое является клиентом http (на данный момент). Итак, я делаю:
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);
});
Это кажется хорошим способом для этого. Тем не менее, я немного удивился, что должен был сделать шаг url + query
. Это должно быть инкапсулировано общей библиотекой, но я не вижу эту существующую библиотеку node http
, и я не уверен, какой стандартный пакет npm мог бы ее выполнить. Есть ли более широко используемый способ, который лучше?
метод url.format сохраняет работу по созданию собственного URL-адреса. Но в идеале запрос будет выше, чем этот.
Ответы
Ответ 1
Откройте request модуль.
Это более полнофункциональный, чем node встроенный клиент http.
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);
});
Ответ 2
Если вы не хотите использовать внешний пакет, просто добавьте следующую функцию в свои утилиты:
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;
}
Затем в createServer
перезвоните, добавьте атрибут params
в request
объект:
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"
})
Ответ 3
Я пытаюсь добавить параметры строки запроса в свой URL. Я не мог заставить его работать, пока не понял, что мне нужно добавить ?
в конце моего URL-адреса, иначе это не сработает. Это очень важно, так как это сэкономит вам часы отладки, поверьте мне: был там... сделал это.
Ниже приведена простая конечная точка API, которая вызывает Open Weather API и передает APPID
, lat
и lon
в качестве параметров запроса и возвращать данные о погоде в качестве объекта JSON
. Надеюсь это поможет.
//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.
}
})
})
Или, если вы хотите использовать модуль querystring
, внесите следующие изменения
var queryObject = querystring.stringify({
APPID: OpenWeatherAppId.appId,
lat: req.body.lat,
lon: req.body.lon
});
request({
url:urlOpenWeatherCurrent + queryObject
}, function (error, response, body) {...})