برنامه‌نویسی

ایجاد درخواست‌های HTTP با Nodejs

ایحاد درخواست‌های http با nodejs

Node.js یکی از محبوب‌ترین فریم‌ورک‌های زبان جاوااسکریپت است که امروزه مورد توجه بسیاری از توسعه‌دهندگان قرار گرفته و از آن برای ایجاد برنامه‌های مبتنی بر سرور استفاده می‌کنند. این برنامه‌ها به نوبه خود، در ارائه داده‌ها و اطلاعات مختلف به کاربر، کمک می‌کنند. اما کاربر چگونه درخواست‌‌های خود را به سرور ارسال می‌کند؟ این کار با استفاده از درخواست‌های HTTP انجام شده و درنهایت روند توسعه برنامه برای توسعه‌دهندگان راحت‌تر می‌شود.

موضوع‌هایی که در این مقاله به آنها می‌پردازیم، عبارتند از:

  1. درخواست‌های HTTP در Node.js
  2. ایجاد درخواست‌های HTTP در Node.js
  3. آبجکت request در Node.js

درخواست‌های HTTP در Node.js

درخواست HTTP درواقع پیامی است که از طریق پروتکل HTTP (Hypertext Transfer Protocol) از کاربر به سمت سرور ارسال می‌شود و می‌توانید آن را به عنوان یک information packet میان دو کامپیوتر در نظر بگیرید که مجموعه‌ای از داده‌ها را در خود جای داده است. بعد از پردازش درخواست اول که از کاربر به سرور ارسال شده، پاسخ درخواست به عنوان یک information packet به سمت کاربر ارسال می‌شود. این packet شامل تمام داده‌های لازم درخواست شده توسط کاربر است و به عنوان response یا پاسخ شناخته می‌شود. البته در این مقاله بر روی قسمت درخواست (request) تمرکز خواهیم کرد.

چرخه درخواست‌ها و پاسخ‌های http میان کاربر و سرور

درخواست HTTP یکی از حالت‌های مرورگر برای انتقال داده‌ها بین کاربر و سرور است. این داده‌ها می‌توانند وبسایت، API، تصویر، متن و … باشند. معمولا درخواست‌های HTTP از اسکلت زیر تشکیل شده‌اند:

  1. Request Line
  2. Headers
  3. بدنه درخواست (اختیاری)

ماژول‌های مختلفی وجود دارد که می‌توانید با آنها درخواست‌های HTTP را ایجاد کرده و یا درخواست‌های را در وب سرور، پردازش کنید.

ایجاد درخواست‌های HTTP در Node.js

سه ماژول محبوب که برای ایجاد درخواست‌های HTTP در Node.js از آنها استفاده می‌شود، عبارتند از:

  1. ماژول HTTP
  2. ماژول Request
  3. AXIOS

همچنین در ادامه مقاله، به ترتیب با این ماژول‌ها آشنا می‌شویم.

1) ماژول HTTP

ماژول 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

البته علاوه بر مزیت‌های این ماژول، می‌بایست معایب آن را نیز بدانیم. ماژول HTTP از promiseها پشتیبانی نمی‌کند پس استفاده از آن کمی ناشیانه و غیر قابل اعتماد است.

2) ماژول Request

ماژول 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

بنابراین اگر به دنبال ماژول بدون دردسری هستید، انتخاب Request می‌تواند بهترین گزینه باشد اما اگر به دنبال پشتیبانی از promiseها هستید، باید بگویم که این ماژول نیز از promiseها پشتیبانی نمی‌کند.

3) ماژول Axios

ماژول 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);

درنهایت خروجی‌ کدهای بالا به صورت زیر است:

نتیجه نهایی استفاده از ماژول axios

آبجکت 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 است.

منبع: https://www.edureka.co/blog/node-js-requests