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


ماژول http در Node.js تابعها و کلاس مفیدی برای ساختن سرور HTTP ارائه میکند. در واقع یک ماژول کلیدی Node.js برای شبکه محسوب میشود. در این نوشته به بررسی کارکردهای مختلف این ماژول میپردازیم. برای مطالعه بخش قبلی این مجموعه مقالات آموزشی به لینک زیر رجوع کنید:
شما میتوانید با استفاده از دستور زیر این ماژول را در فایل خود 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 میرسیم. برای مطالعه بخش بعدی و پایانی روی لینک زیر کلیک کنید.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای JavaScript (جاوا اسکریپت)
- مجموعه آموزشهای برنامهنویسی
- آموزش راه اندازی و اجرای Express ،Node.js و MongoDB
- آموزش Node.js: میزبانی و پیکربندی محیط توسعه — بخش دوم
- ساخت یک اپلیکیشن چت ساده با Node.js — از صفر تا صد
==