خب برای انجام دادن کاری که میخواید انجام بدید روش های زیادی وجود داره. من 5 تا از روش های ارسال درخواست های HTTP در Node.Js رو خدمتتون میگم:
1- کتابخانه استاندارد HTTP
اولین راه ماژول (module) پیشفرض HTTP است. با استفاده از ماژولل (module) HTTP می توانید بدون نیاز به نصب پکیج از آن استفاده کنید.
کد زیر یک در خواست GET به APIناسا ارسال می کند و دیتای آن که راجب تصویر نجومی روز است را چاپ می کند .
const https = require('https');
https.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', (resp) => {
let data = '';
// A chunk of data has been recieved.
resp.on('data', (chunk) => {
data += chunk;
});
// The whole response has been received. Print out the result.
resp.on('end', () => {
console.log(JSON.parse(data).explanation);
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
بخش بزرگی از عملکرد HTTP و HTTPS ماژول نسبتا پایین است. شما نیاز دارید که دیتا های بازگشتی را به ترتیب دریافت کنید و یک تابع برای صدا زدن را به محض دریافت تمام اطلاعات وجود ندارد. شما همچنین باید داده های پاسخ را به صورت دستی تجزیه کنید.
مشکل دیگری که وجود دارد این است که این ماژول (module) به طور پیشفرض از HTTPS پشتیبانی نمی کند.
ما نیاز داریم به require شدن HTTPS .
اگر شما امکانات زیادی از این ابزار نمی خواهید. این یک ابزار عالی برای شما است.
2 - Request
این کتابخانه بسیار کاربر پسند تر از کتابخانه پیشفرض HTTP است.
انتخاب شخصی من برای استفاده در NodeJs کتابخانه Request است و برخلاف ماژول HTTP برای انجام سریع کار ها عالی است.
شما باید این کتابخانه را از طریق NPM نصب کنید به صورت زیر:
npm install request
همانطور که مشاهده می کنید برای کاری مشابه بالا نیاز به کد کمتری هست.
const request = require('request');
request('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }, (err, res, body) => {
if (err) { return console.log(err); }
console.log(body.url);
console.log(body.explanation);
});
یک گزینه فوق العاده است برای استفاده آسان از در خواست های HTTP است.
اگر می خواهید از Promises استفاده کنید، می توانید از کتابخانه request-promiseاستفاده کنید.
3- Axios
اگزیوس یک کتابخانه مبتنی بر Promises است.
مزیت مهم Promisesزمانی است که به صورت پیچیده از event ها استفاده کرده ایم و بقیه کد باید منتظر جواب درخواست های قبلی باشد.
برای استفاده از axiosخط زیر را در ترمینال (terminal) خود وارد کنید.
npm install axios
کد زیر همان کاری را می کند که کد های بالا انجام می دادند.
const axios = require('axios');
axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY')
.then(response => {
console.log(response.data.url);
console.log(response.data.explanation);
})
.catch(error => {
console.log(error);
});
axios به طور پیشفرض JSON را تجریه می کند.
.catch() میتوانیم خطا ها رو متوجه شویم.
شما می توانید با استفاده از axios.all در خواست های خود را به صورت همزمان یا موازی (multiple) ارسال کنید
var axios = require('axios');
axios.all([
axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-08-03'),
axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-08-02')
]).then(axios.spread((response1, response2) => {
console.log(response1.data.url);
console.log(response2.data.url);
})).catch(error => {
console.log(error);
});
4- SuperAgent
شبیه به axios است. SuperAgent یکی دیگر از کتابخانه های محبوب ارسال درخواست HTTPاست .
با کامند زیر آن را نصب کنید.
npm install superagent
و کد زیر را امتحان می کنیم.
const superagent = require('superagent');
superagent.get('https://api.nasa.gov/planetary/apod')
.query({ api_key: 'DEMO_KEY', date: '2017-08-02' })
.end((err, res) => {
if (err) { return console.log(err); }
console.log(res.body.url);
console.log(res.body.explanation);
});
با متد query() بخش هایی را به URL اضافه می کنیم ولی در روش های قبلی خودمان به صورت دستی این عمل رو انجام می دادیم.
SuperAgent خود JSON را مانند axios تجزیه می کند و نیازی به تجزیه دوباره آن نیست.
5-GOT
اگر به دنبال یک کتابخانه سبک می باشید GOT می تواند انتخاب خوبی برای شما باشد.
با کامند زیر آن را نصب می کنیم.
npm install got
مانند axios این کتابخانه نیز با Promises کار می کند
const got = require('got');
got('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }).then(response => {
console.log(response.body.url);
console.log(response.body.explanation);
}).catch(error => {
console.log(error.response.body);
});
و چندین راه دیگر
با توجه به شرایط پروژه خود از یکی از روش ها استفاده کنید.
موفقق باشید.