ایجاد درخواستهای HTTP با Nodejs
۲۶ مهر ۱۳۹۹
Node.js یکی از محبوبترین فریمورکهای زبان جاوااسکریپت است که امروزه مورد توجه بسیاری از توسعهدهندگان قرار گرفته و از آن برای ایجاد برنامههای مبتنی بر سرور استفاده میکنند. این برنامهها به نوبه خود، در ارائه دادهها و اطلاعات مختلف به کاربر، کمک میکنند. اما کاربر چگونه درخواستهای خود را به سرور ارسال میکند؟ این کار با استفاده از درخواستهای HTTP انجام شده و درنهایت روند توسعه برنامه برای توسعهدهندگان راحتتر میشود.
موضوعهایی که در این مقاله به آنها میپردازیم، عبارتند از:
- درخواستهای HTTP در Node.js
- ایجاد درخواستهای HTTP در Node.js
- آبجکت request در Node.js
درخواستهای HTTP در Node.js
درخواست HTTP درواقع پیامی است که از طریق پروتکل HTTP (Hypertext Transfer Protocol) از کاربر به سمت سرور ارسال میشود و میتوانید آن را به عنوان یک information packet میان دو کامپیوتر در نظر بگیرید که مجموعهای از دادهها را در خود جای داده است. بعد از پردازش درخواست اول که از کاربر به سرور ارسال شده، پاسخ درخواست به عنوان یک information packet به سمت کاربر ارسال میشود. این packet شامل تمام دادههای لازم درخواست شده توسط کاربر است و به عنوان response یا پاسخ شناخته میشود. البته در این مقاله بر روی قسمت درخواست (request) تمرکز خواهیم کرد.
درخواست HTTP یکی از حالتهای مرورگر برای انتقال دادهها بین کاربر و سرور است. این دادهها میتوانند وبسایت، API، تصویر، متن و … باشند. معمولا درخواستهای HTTP از اسکلت زیر تشکیل شدهاند:
- Request Line
- Headers
- بدنه درخواست (اختیاری)
ماژولهای مختلفی وجود دارد که میتوانید با آنها درخواستهای HTTP را ایجاد کرده و یا درخواستهای را در وب سرور، پردازش کنید.
ایجاد درخواستهای HTTP در Node.js
سه ماژول محبوب که برای ایجاد درخواستهای HTTP در Node.js از آنها استفاده میشود، عبارتند از:
- ماژول HTTP
- ماژول Request
- AXIOS
همچنین در ادامه مقاله، به ترتیب با این ماژولها آشنا میشویم.
1) ماژول HTTP
ماژول HTTP یک روش استاندارد و قدیمی برای ایجاد درخواستهای HTTP است. این ماژول به صورت پیشفرض در Node.js وجود دارد و شما بدون نیاز به نصب هیچگونه وابستگیای میتوانید با وارد کردن آن به پروژه کار را شروع کنید.
مبتدیان در استفاده از Node.js تمایل دارند از http.get یا https.get برای ارسال درخواست GET به API استفاده کنند. یکی از مزیتهای اصلی این ماژول، داخلی بودن آن است که نیاز شما به استفاده از پکیجهای دیگر را کاهش میدهد و همچنین روند را کمی سریعتر میکند. کدهای زیر، مثالی برای استفاده از ماژول HTTP است:
const https = require("https");
const url = "https://my-json-server.typicode.com/edurekaDemo/noderequest/db";
https.get(url, res => {
res.setEncoding("utf8");
let body = "";
res.on("data", data => {
body += data;
});
res.on("end", () => {
body = JSON.parse(body);
console.log(body);
});
});
خروجی کدهای بالا به صورت زیر است:
البته علاوه بر مزیتهای این ماژول، میبایست معایب آن را نیز بدانیم. ماژول HTTP از promiseها پشتیبانی نمیکند پس استفاده از آن کمی ناشیانه و غیر قابل اعتماد است.
2) ماژول Request
ماژول Request یکی از محبوبترین پکیجهای موجود در Node.js است. این پکیج در مقایسه با ماژول HTTP، کاربر پسندانهتر است و به همین دلیل توسعهدهندگان بیشتری به آن اعتماد میکنند. این ماژول به گونهای طراحی شده که بتوانید درخواست HTTP خود را به سادهترین شکل ممکن ایجاد کنید. ماژول Request ارتقا یافته ماژول HTTP است و با استفاده از آن میتوانید به تمام قابلیتهای موجود در ماژول HTTP با روشی سادهتر دسترسی داشته باشید.
قبل از اینکه بتوانید با استفاده از این ماژول درخواست HTTP خود را ایجاد کنید، میبایست با دستور زیر آن را در سیستم خود نصب کنید:
npm i request
و پس از نصب ماژول میتوانید به صورت زیر از ماژول Request استفاده کنید:
const request = require("request");
const url = "https://my-json-server.typicode.com/edurekaDemo/noderequest/db";
request.get(url, (error, response, body) => {
let json = JSON.parse(body);
console.log(body);
});
درنهایت، خروجی کدهای بالا به صورت زیر خواهند بود:
بنابراین اگر به دنبال ماژول بدون دردسری هستید، انتخاب Request میتواند بهترین گزینه باشد اما اگر به دنبال پشتیبانی از promiseها هستید، باید بگویم که این ماژول نیز از promiseها پشتیبانی نمیکند.
3) ماژول Axios
Axios یک HTTP client مبتنی بر promise است که میتوان از آن در مرورگر و همچنین Node.js استفاده کرد زیرا Axios یک API برای مدیریت XMLHttpRequest و node HTTP interface ارائه میهد. این پکیج معمولا هنگامی مورد استفاده قرار میگیرد که توسعهدهنده با یک سری رویداد پیچیده روبرو باشد و از آنجا که نوشتن کدها به صورت asynchronous بسیار گیج کننده است، Axios با پشتیبانی از promiseها به بهترین گزینه برای حل مشکلات مختلف، تبدیل شده است.
قبل از استفاده از ماژول Axios باید آن را با استفاده از دستور زیر در سیستم خود نصب کنید:
npm i axios
پس از نصب موفقیت آمیز این ماژول میتوانید به صورت زیر از آن در کدهای خود استفاده کنید:
const axios = require("axios");
const url = "https://my-json-server.typicode.com/edurekaDemo/noderequest/db";
const getData = async url => {
try {
const response = await axios.get(url);
const data = response.data;
console.log(data);
} catch (error) {
console.log(error);
}
};
getData(url);
درنهایت خروجی کدهای بالا به صورت زیر است:
آبجکت request در Node.js
آبجکت request در Node.js به بازیابی (retrieving) مقادیری که از طریق مرورگر کاربر به سرور Node.js فرستاده شده، کمک میکند. مثلا اطلاعات کاربر را نگه میدارد و در ایجاد صفحههای پویای وب به کار میآید. همچنین بر اساس ورودیهای کاربر قادر به انجام عملیات مختلفی در سمت سرور است. مثلا میتوانید از آبجکت request برای گرفتن اطلاعاتی مثل URL، request header و دادههای درخواست HTTPای که از سمت کاربر ارسال شده، استفاده کنید. جدول زیر محبوبترین ویژگیهای مورد استفادهی آبجکت request است.
ویژگی | توضیحات |
---|---|
req.app | این ویژگی به کمک middleware استفاده از رفرنسهای فعلی برنامهی Express را ممکن میکند. |
req.baseUrl | از این ویژگی برای دریافت baseUrl یک Route خاص استفاده میشود. |
req.body | از این ویژگی برای دریافت مقادیر key-value در بدنه درخواست ارسالی از کاربر استفاده میشود. |
req.params | از این ویژگی برای دریافت آبجکتهایی که تحت عنوان پارامترهای درخواست هستند، استفاده میشود. |
req.path | برای دریافت URL درخواست شده میتوانید از این ویژگی استفاده کنید. |
req.protocol | این ویژگی یک string از پروتکلهایی مانند HTTP یا HTTPS که توسط TLS درخواست میشوند را در اختیار ما قرار میدهد. |
req.secure | این ویژگی یک مقدار boolean در اختیار ما قرار میدهد، مثلا اگر اتصال TLS موفقیت آمیز بوده باشد، مقدار آن برابر با true و در غیر این صورت، false است. |