
در این بخش، به دنیای برنامهنویسی، الگوریتمها، شبکه و زیرساختهای فناوری میپردازیم
در Node.js مجموعهای از اشیاء و متغیرهای سراسری وجود دارد که در همهٔ ماژولها در دسترس هستند. برخی از این متغیرها مانند __dirname و __filename فقط در محدودهٔ ماژولهای CommonJS معتبرند. علاوه بر این، کلاسها و ابزارهایی مانند AbortController، Buffer، BroadcastChannel، fetch و localStorage بهصورت سراسری در محیط Node.js قابل استفادهاند. این اشیاء ترکیبی از قابلیتهای اختصاصی Node.js و APIهای سازگار با مرورگر هستند.
ماژول http در Node.js هم کلاینت و هم سرور HTTP را پیادهسازی میکند. این ماژول برای مدیریت جریان دادهها و پارس پیامها طراحی شده و برخلاف بسیاری از کتابخانهها، کل درخواست یا پاسخ را بافر نمیکند. این ویژگی امکان کار با پیامهای بزرگ یا chunk-encoded را فراهم میکند. ماژول HTTP سطح پایین است و تنها مسئول مدیریت جریان و پارس اولیهٔ پیامهاست، نه تفسیر محتوای هدرها یا بدنه.
ماژول node:http2 در Node.js پیادهسازی پایدار پروتکل HTTP/2 را فراهم میکند. برخلاف API مربوط به HTTP/1، API اصلی HTTP/2 بهطور ویژه برای ویژگیهای این پروتکل طراحی شده است؛ مثل جریانهای چندگانه (multiplexed streams)، قابلیت server push و کنترل جریان پیشرفته. این API طراحی متقارن بین کلاینت و سرور دارد و رویدادهایی مانند stream، error و connect در هر دو سمت قابل استفاده هستند. برای سازگاری با مرورگرها باید از سرور امن (http2.createSecureServer) استفاده کرد و کلاینتها میتوانند با http2.connect متصل شوند.
ماژول node:https در Node.js پیادهسازی پروتکل HTTP روی TLS/SSL است. این ماژول امکان ایجاد سرورهای امن، مدیریت اتصالهای رمزگذاریشده، و ارسال درخواستهای HTTPS را فراهم میکند. توسعهدهندگان میتوانند با استفاده از گواهیهای TLS ارتباطات امن برقرار کنند، از قابلیتهایی مانند Agent برای مدیریت اتصالها بهره ببرند، و درخواستهای کلاینت را با امنیت بالا ارسال کنند.
ماژول node:inspector در Node.js یک API برای تعامل با V8 Inspector فراهم میکند. این ماژول امکان اتصال به پروتکل Chrome DevTools را میدهد و توسعهدهندگان میتوانند از آن برای دیباگ، پروفایلینگ CPU و حافظه، و جمعآوری رویدادهای شبکه استفاده کنند. Inspector هم نسخهٔ مبتنی بر Promise و هم نسخهٔ Callback دارد و ابزار قدرتمندی برای بررسی وضعیت اجرای برنامه است.
Node.js امکانات متعددی برای نوشتن برنامههای بینالمللی دارد. این امکانات شامل توابع حساس به locale در استاندارد ECMAScript، شیء Intl، متدهای locale-aware مانند localeCompare و toLocaleString، پشتیبانی از دامنههای بینالمللی در URL، و ابزارهایی مانند TextDecoder و RegExp Unicode Property Escapes است. این قابلیتها توسط موتور V8 و کتابخانه ICU (International Components for Unicode) پیادهسازی میشوند. بسته به نحوهٔ ساخت Node.js، میتوان مجموعهٔ دادههای ICU را بهصورت کامل یا محدود در باینری قرار داد.
ماژولهای CommonJS روش اصلی بستهبندی کد جاوااسکریپت در Node.js هستند. هر فایل در Node.js بهعنوان یک ماژول جداگانه در نظر گرفته میشود و میتواند با استفاده از require() ماژولهای دیگر را بارگذاری کند. خروجی هر ماژول از طریق exports یا module.exports در دسترس قرار میگیرد. این سیستم امکان سازماندهی کد، مدیریت وابستگیها، و استفادهٔ مجدد از ماژولها را فراهم میکند.
ماژولهای ECMAScript (ESM) استاندارد رسمی برای بستهبندی کد جاوااسکریپت هستند. این ماژولها با استفاده از دستورهای import و export تعریف میشوند و در Node.js بهطور کامل پشتیبانی میشوند. Node.js علاوه بر پشتیبانی از ESM، امکان تعامل با سیستم قدیمی CommonJS را نیز فراهم میکند. توسعهدهندگان میتوانند با استفاده از پسوند .mjs، فیلد "type": "module" در فایل package.json یا فلگ --input-type=module فایلها را بهعنوان ماژول ECMAScript مشخص کنند. این ماژولها قابلیتهای مدرن مانند import.meta، بارگذاری پویا (import())، و پشتیبانی از JSON و WASM را ارائه میدهند.
ماژول node:module در Node.js مجموعهای از ابزارها و متدهای عمومی برای تعامل با سیستم ماژولها فراهم میکند. این API امکان بررسی ماژولهای داخلی، ایجاد تابع require در محیط ESM، یافتن فایلهای package.json، ثبت hooks سفارشی برای تغییر رفتار بارگذاری ماژولها، همگامسازی خروجیهای CommonJS و ESM، و استفاده از cache کامپایل برای افزایش سرعت را فراهم میکند.
یک Package در Node.js مجموعهای از فایلها و پوشههاست که توسط فایل package.json توصیف میشود. این فایل مشخص میکند که ماژولها چگونه باید بارگذاری شوند، نوع ماژولها (CommonJS یا ES Module) چیست، و چه مسیرهایی بهعنوان entry point یا exports در دسترس هستند. Node.js از دو سیستم ماژول (CommonJS و ES Modules) پشتیبانی میکند و با استفاده از فیلدهای type, main, exports, و imports در package.json میتوان رفتار بارگذاری را کنترل کرد.
Node.js از دو روش برای اجرای فایلهای TypeScript پشتیبانی میکند: استفاده از بستههای شخص ثالث برای پشتیبانی کامل از تمام ویژگیهای TypeScript، یا استفاده از قابلیت داخلی برای حذف نوعها (type stripping) که سبکتر است. در حالت داخلی، Node.js تنها نوعها را حذف میکند و هیچ بررسی یا تبدیل پیچیدهای انجام نمیدهد. برای استفاده از تمام قابلیتهای TypeScript، از ابزارهایی مانند tsx یا سایر کتابخانههای مشابه باید استفاده شود.
ماژول node:net یک API شبکهٔ ناهمگام برای ایجاد سرورهای TCP یا IPC و همچنین کلاینتها فراهم میکند. این ماژول امکان کار با سوکتها، مدیریت ارتباطات، و کنترل دسترسی به آدرسهای IP را میدهد. از طریق کلاسهایی مانند net.Server, net.SocketAddress, و net.BlockList میتوان رفتار شبکه را بهطور دقیق مدیریت کرد.