ایجاد درخواست‌های 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

برچسب‌ها:

خدمات رایگان لیارا

۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان

۲.۵ گیگابایت Object Storage سازگار با پروتکل S3 با دیسک‌های SSD به‌صورت رایگان دریافت کنید.

هاست رایگان برای دیتابیس‌

دیتابیس‌های MariaDB، PostgreSQL و Redis را فقط با یک کلیک و به‌صورت رایگان تهیه کنید.

سرویس DNS رایگان

به سادگی دامنه‌تان را اضافه کنید و به صورت رایگان رکورد‌های آن را مدیریت کنید.

۱۰۰ هزار تومان اعتبار اولیه

بعد از ثبت نام در لیارا مبلغ ۱۰۰ هزار تومان اعتبار هدیه دریافت می‌کنید که با توجه به ساعتی بودن هزینه سرویس‌ها، می‌توانید تمامی خدمات پولی را برای چندین هفته رایگان استفاده کنید.

ارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماه

در سرویس ایمیل لیارا شما می‌توانید تا ۱۰۰ ایمیل رایگان در هر ماه ارسال کنید و فقط برای بیش از آن هزینه پرداخت کنید. (به‌همراه دسترسی SMTP)

هاست رایگان برای انواع وبسایت

تفاوتی ندارد برای وبسایت خود از Node استفاده می‌کنید یا Laravel و Django، در لیارا می‌توانید به صورت کاملا رایگان آن را میزبانی کنید.

توسعه‌دهندگان درباره‌ی ما چه می‌گویند

تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...

MohammadReza
liara testimonial
keikaavousi

بعد از بسته شدن @fandoghpaas و ناراحتی همه‌مون از اینکه یه سرویس خوب و صادق نمی‌تونه از پس هزینه‌ها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوت‌هایی داشت که کمی کار می‌خواست ولی تا الان کاملا راضی.

jadi
liara testimonial
jadi

یه خسته نباشید باید به تصمیمliara_cloud@بگم،
بعد از چندین روز سرکله زدن با سرویس های مشابه بالاخره تصمیم گرفتم لیارا رو امتحان کنم و باور نمیشه ۱۰ دقیقه بیشتر وقت نبرد،
دمتون گرم.

Arch
liara testimonial
EbadiDev

واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیت‌های سرویس دیتابیس‌شون اینه که خودشون به صورت دوره‌ای بکآپ میگیرن.
...

Ali Najafi
liara testimonial
me_ali_najafi

یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@

Navid
liara testimonial
1navid

عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم

Amir H Shekari
liara testimonial
vanenshi