آموزش Node.js: ماژول http — بخش یازدهم

۱۳۹ بازدید
آخرین به‌روزرسانی: ۰۳ مهر ۱۴۰۲
زمان مطالعه: ۴ دقیقه
آموزش Node.js: ماژول http — بخش یازدهم

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

997696

شما می‌توانید با استفاده از دستور زیر این ماژول را در فایل خود include کنید:

1const http = require('http')

ماژول مورد اشاره برخی مشخصه‌ها و متدها و همچنین برخی کلاس‌ها را ارائه می‌کند.

مشخصه‌ها

در این بخش به بررسی مشخصه‌های ماژول http می‌پردازیم.

http.METHODS

این مشخصه لیستی از همه متدهای مورد پشتیبانی HTTP را ارائه می‌کند:

1> require('http').METHODS['ACL', 'BIND', 'CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'HEAD', 'LINK', 'LOCK', 'M-SEARCH', 'MERGE', 'MKACTIVITY', 'MKCALENDAR', 'MKCOL', 'MOVE', 'NOTIFY', 'OPTIONS', 'PATCH', 'POST', 'PROPFIND', 'PROPPATCH', 'PURGE', 'PUT', 'REBIND', 'REPORT', 'SEARCH', 'SUBSCRIBE', 'TRACE', 'UNBIND', 'UNLINK', 'UNLOCK', 'UNSUBSCRIBE']

http.STATUS_CODES

این مشخصه همه کدهای حالت HTTP و توصیف آن‌ها را لیست می‌کند:

1> require('http').STATUS_CODES{ '100': 'Continue', '101': 'Switching Protocols', '102': 'Processing', '200': 'OK', '201': 'Created', '202': 'Accepted', '203': 'Non-Authoritative Information', '204': 'No Content', '205': 'Reset Content', '206': 'Partial Content', '207': 'Multi-Status', '208': 'Already Reported', '226': 'IM Used', '300': 'Multiple Choices', '301': 'Moved Permanently', '302': 'Found', '303': 'See Other', '304': 'Not Modified', '305': 'Use Proxy', '307': 'Temporary Redirect', '308': 'Permanent Redirect', '400': 'Bad Request', '401': 'Unauthorized', '402': 'Payment Required', '403': 'Forbidden', '404': 'Not Found', '405': 'Method Not Allowed', '406': 'Not Acceptable', '407': 'Proxy Authentication Required', '408': 'Request Timeout', '409': 'Conflict', '410': 'Gone', '411': 'Length Required', '412': 'Precondition Failed', '413': 'Payload Too Large', '414': 'URI Too Long', '415': 'Unsupported Media Type', '416': 'Range Not Satisfiable', '417': 'Expectation Failed', '418': 'I\'m a teapot', '421': 'Misdirected Request', '422': 'Unprocessable Entity', '423': 'Locked', '424': 'Failed Dependency', '425': 'Unordered Collection', '426': 'Upgrade Required', '428': 'Precondition Required', '429': 'Too Many Requests', '431': 'Request Header Fields Too Large', '451': 'Unavailable For Legal Reasons', '500': 'Internal Server Error', '501': 'Not Implemented', '502': 'Bad Gateway', '503': 'Service Unavailable', '504': 'Gateway Timeout', '505': 'HTTP Version Not Supported', '506': 'Variant Also Negotiates', '507': 'Insufficient Storage', '508': 'Loop Detected', '509': 'Bandwidth Limit Exceeded', '510': 'Not Extended', '511': 'Network Authentication Required' }

http.globalAgent

این مشخصه به وهله‌ای سراسری از شیء Agent اشاره می‌کند که وهله‌ای از کلاس http.Agent است. این مشخصه به مدیریت اتصال‌های دائمی می‌پردازد و از آن‌ها برای کلاینت‌های HTTP استفاده مجدد می‌کند و مؤلفه‌ای کلیدی برای شبکه‌بندی HTTP در Node.js محسوب می‌شود. برای مشاهده توضیحات بیشتر در خصوص http.Agent به ادامه همین مقاله مراجعه کنید.

متدها

در این بخش متدهای موجود در ماژول http را معرفی می‌کنیم.

()http.createServer

این متد یک وهله از کلاس http.Server بازگشت می‌دهد. کاربرد آن به صورت زیر است:

1const server = http.createServer((req, res) => {//handle every single request with this callback})

()http.request

یک درخواست HTTP به سرور ایجاد می‌کند و وهله‌ای از کلاس http.ClientRequest می‌سازد.

()http.get

مشابه ()http.request است، اما به صورت خودکار متد HTTP را روی GET تنظیم می‌کند و ()req.end را به صورت خودکار فراخوانی می‌کند.

کلاس‌ها

ماژول HTTP پنج کلاس ارائه می‌کند که در ادامه به آن‌ها می‌پردازیم:

کلاس http.Agent

Node وهله‌ای سراسری از کلاس http.Agent برای مدیریت تداوم اتصال و استفاده مجدد از کلاینت‌های HTTP ارائه می‌کند که مؤلفه‌ای کلیدی برای شبکه‌بندی HTTP محسوب می‌شود. بدین ترتیب مطمئن می‌شویم که هر درخواست که به سرور ارسال می‌شود صف‌بندی شده و یک سوکت منفرد مورد استفاده مجدد قرار می‌گیرد. همچنین یک استخر از سوکت‌ها نگهداری می‌کند که برای حفظ عملکرد مؤلفه‌ای کلیدی محسوب می‌شود.

کلاس http.ClientRequest

هر شیء http.ClientRequest زمانی که ()http.request یا ()http.get فراخوانی می‌شود، ایجاد خواهد شد. زمانی که پاسخی دریافت می‌شود، رویداد response با استفاده از پاسخ فراخوانی می‌شود و آرگومان آن نیز وهله‌ای از http.IncomingMessage است.

در مورد داده‌های بازگشتی یک پاسخ را می‌توان به 2 روش خواند:

  • می‌توان متد ()response.read را فراخوانی کرد.
  • همچنین می‌توان در دستگیره رویداد response یک شنونده رویداد برای رویداد date تنظیم کرد و بدین ترتیب به داده‌هایی که وارد می‌شوند توجه کرد.

کلاس http.Server

این کلاس به طور معمول زمانی وهله‌سازی و بازگشت داده می‌شود که یک سرور جدید با استفاده از ()http.createServer ساخته می‌شود.

زمانی که یک شیء سرور دارید، به متدهای آن نیز دسترسی دارید:

  • ()Close سرور را از پذیرش اتصال‌های جدید باز می‌دارد.
  • ()Listen موجب می‌شود که سرور HTTP آغاز شده و به اتصال‌ها گوش دهد.

کلاس http.ServerResponse

این کلاس به وسیله http.Server ساخته شده است و به عنوان پارامتر دوم به رویداد request ارسال می‌شود. این کلاس به طور معمول در کد به صورت res نوشته و استفاده می‌شود:

1const server = http.createServer((req, res) => {  //res is an http.ServerResponse object})

متدی که معمولاً در دستگیره فراخوانی می‌شود ()end نام دارد که موجب بسته شدن response می‌شود و بدین ترتیب با کامل شدن پیام، سرور می‌تواند آن را به کلاینت بفرستد. آن را باید روی هر پاسخ فراخوانی کرد.

از این متدها برای تعامل با هدرهای HTTP استفاده می‌شود:

  • ()getHeaderNames – لیستی از نام‌های هدرهای HTTP که از قبل تعیین شده را بازگشت می‌دهد.
  • ()getHeaders – یک کپی از هدرهای HTTP که قبلاً تعیین شده‌اند به دست می‌دهد.
  • (setHeader('headername', value – یک مقدار هدر HTTP را تنظیم می‌کند.
  • ('getHeader('headername – یک هدر HTTP را که قبلاً تنظیم شده دریافت می‌کند.
  • ('removeHeader('headername – یک هدر HTTP که قبلاً تنظیم‌شده را حذف می‌کند.
  • ('hasHeader('headername – در صورتی که پاسخ دارای هدر تعیین شده باشد، مقدار true بازگشت می‌دهد.
  • ()headersSent – در صورتی که هدرها از قبل به کلاینت ارسال شده باشند، مقدار true بازگشت می‌دهد.

پس از پردازش هدرها می‌توان آن‌ها را مستقیماً با فراخوانی ()response.writeHead به کلاینت ارسال کرد. این متد یک statusCode به عنوان پارامتر اول می‌گیرد و پیام وضعیت و شیء هدر نیز اختیاری هستند.

برای ارسال داده‌ها به کلاینت در بدنه پاسخ باید از متد ()write استفاده کنید. این متد داده‌های بافر شده را به استریم پاسخ HTTP می‌فرستد.

اگر هدرها با استفاده از ()response.writeHead ارسال نشده باشند، ابتدا به همراه کد وضعیت و پیام آن که در درخواست تنظیم شده فرستاده می‌شوند. این موارد را می‌توانید با تنظیم مقادیر مشخصه‌های statusCode و statusMessage تغییر دهید.

1response.statusCode = 500response.statusMessage = 'Internal Server Error'

کلاس http.IncomingMessage

یک شیء http.IncomingMessage به صورت زیر ساخته می‌شود:

  • http.Server زمانی که به رویداد request گوش می‌دهد.
  • http.ClientRequest زمانی که به رویداد response گوش می‌دهد.

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

  • برای دسترسی به وضعیت می‌توان از متدهای statusCode و statusMessage آن استفاده کرد.
  • برای دسترسی به هدرها می‌توان از متد headers یا rawHeaders استفاده کرد.
  • متد HTTP با استفاده از متدی به نام method مورد دسترسی قرار می‌گیرد.
  • نسخه HTTP با استفاده از متد httpVersion به دست می‌آید.
  • URL با استفاده از متد url به دست می‌آید.
  • سوکت زیرین با استفاده از متد socket به دست می‌آید.

این داده‌ها با استفاده از استریم‌ها در دسترس ما قرار می‌گیرند، زیرا http.IncomingMessage اینترفیس Readable Stream را پیاده‌سازی می‌کند.

بدین ترتیب به پایان این بخش از سری مقالات آموزش Node.js می‌رسیم. برای مطالعه بخش بعدی و پایانی روی لینک زیر کلیک کنید.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
freecodecamp
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *