У меня есть приложение 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
шаг. Это должно инкапсулироваться общей библиотекой, но я не вижу это существующее в узле http
библиотека все же и я не уверен, какой стандарт npm пакет мог бы выполнить ее. Существует ли обоснованно широко используемый способ, которым это лучше?
метод url.format сохраняет работу создания собственного URL. Но идеально запрос будет высокоуровневым, чем это также.
Проверьте запрос модуль.
Это более полнофункционально, чем встроенный 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);
});
Если Вы не хотите использование внешний пакет, Просто добавьте следующую функцию в своих утилитах:
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"
})
Я боролся с тем, как добавить параметры строки запроса к моему URL. Я не мог заставить его работать, пока я не понял, что должен был добавить ?
в конце моего URL, иначе это не будет работать. Это очень важно, поскольку это будет сохранять Вас часы отладки, верить мне: там... сделанный это .
Ниже, простая Конечная точка API, которая звонит , Открывают 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) {...})
Никакая потребность в сторонней библиотеке. Используйте модуль nodejs url для создания URL с параметрами запроса:
const requestUrl = url.parse(url.format({
protocol: 'https',
hostname: 'yoursite.com',
pathname: '/the/path',
query: {
key: value
}
}));
Затем выполняют запрос с отформатированным URL. requestUrl.path
будет включать параметры запроса.
const req = https.get({
hostname: requestUrl.hostname,
path: requestUrl.path,
}, (res) => {
// ...
})