HttpクライアントであるNode.jsアプリケーションがあります(現時点では)。だから私はやっている:
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パッケージがそれを達成できるのかわかりません。より適切な広く使用されている方法はありますか?
rl.format メソッドは、独自のURLを作成する作業を節約します。しかし理想的には、リクエストはこれよりも高いレベルになります。
request モジュールを確認してください。
これは、ノードの組み込み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の最後に?
を追加する必要があることに気づくまで、機能させることができませんでした。そうしないと機能しません。これはデバッグの時間を節約するので非常に重要です、信じてください:been ... done thatdone.
以下は、Open Weather APIを呼び出し、APPID
、lat
、lon
をクエリパラメーターとして渡し、JSON
オブジェクトとして気象データを返す単純なAPIエンドポイントです。 。お役に立てれば。
//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 rl module を使用して、クエリパラメーターで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) => {
// ...
})