خب برای انجام دادن کاری که میخواید انجام بدید روش های زیادی وجود داره. من 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);
});
و چندین راه دیگر
با توجه به شرایط پروژه خود از یکی از روش ها استفاده کنید.
موفقق باشید.