Node.js چیست و در سمت سرور چه مسئلهای را حل میکند؟
در این درس ۵ بخش
وقتی در یک فروشگاه روی «ثبت سفارش» میزنید، مرورگر میتواند فرم را نمایش دهد و خالینبودن نام را بررسی کند؛ اما تصمیم نهایی دربارهٔ قیمت، موجودی و اجازهٔ خرید باید در بخش قابل اعتماد سامانه گرفته شود. Node.js یکی از محیطهایی است که میتوان این بخش را با جاوااسکریپت در آن اجرا کرد. در این دورهٔ رایگان، از آمادهکردن ویندوز تا ساخت و آزمودن یک API آموزشی جلو میرویم. برای شروع، نیازی به اجارهٔ سرور، خرید دامنه یا نصب پایگاه داده ندارید.
زبان، محیط اجرا و چارچوب را از هم تشخیص دهید
جاوااسکریپت زبان است؛ یعنی قواعدی مانند تابع، شیء، شرط و Promise را مشخص میکند. Node.js محیط اجرای این زبان بیرون از مرورگر است و امکاناتی برای شبکه، فایل و فرایند در اختیار برنامه میگذارد. Express و Fastify نمونهٔ چارچوبهایی هستند که میتوان روی Node.js استفاده کرد؛ نصب آنها شرط اجرای اولین برنامه نیست. npm نیز مدیر بسته و ابزار اجرای اسکریپتهای پروژه است. این نامها به بخشهای متفاوت کار اشاره میکنند و هر خطا را باید در همان لایه پیگیری کرد.
یک تابع محاسبه ممکن است هم در مرورگر و هم در Node.js اجرا شود؛ اما امکانات محیط یکسان نیستند. در Node.js معمولاً document و window نداریم، چون صفحهٔ HTML و DOM مرورگر وجود ندارد. در مرورگر هم دسترسی عمومی و مستقیم برنامهٔ Node به فایلهای سیستم کاربر در دسترس نیست. وجود APIهایی مانند fetch در هر دو محیط به معنی یکسانبودن همهٔ امکانات یا مدل امنیتی آنها نیست. کتابخانهای که برای رابط مرورگر نوشته شده، الزاماً برای برنامهٔ سرور مناسب نیست.
const lines = [
{ title: 'دفتر', quantity: 2, unitPrice: 45000 },
{ title: 'مداد', quantity: 3, unitPrice: 10000 }
];
const total = lines.reduce(
(sum, line) => sum + line.quantity * line.unitPrice,
0
);
console.log(total); // 120000
console.log(typeof document); // undefined در اجرای معمول Node.jsاین مثال را پس از نصب، در فایل price.mjs ذخیره و با node price.mjs اجرا میکنید. مبلغها در سناریوی آموزشی تومان و عدد صحیحاند. نتیجهٔ محاسبه در کنسول چاپ میشود؛ هنوز هیچ سرور، صفحه یا پرداختی ساخته نشده است. تمایز خروجی کنسول و پاسخ شبکه کمک میکند هنگام یادگیری، موفقیت یک مرحله را با تکمیل کل محصول اشتباه نگیرید.
مسیر یک درخواست از مرورگر تا داده
در نمونهٔ فروشگاه، مرورگر درخواست HTTP شامل مسیر، روش و دادهٔ لازم میفرستد. برنامهٔ سرور درخواست را دریافت میکند، هویت و مجوز را بررسی میکند، ورودی را با قرارداد داده میسنجد و در صورت نیاز از پایگاه داده نتیجه میگیرد. سپس پاسخی با کد وضعیت و بدنه، مثلاً JSON، برمیگرداند. مرورگر پاسخ را به رابط تبدیل میکند. در پروژهٔ این دوره، بهجای پرداخت یا دادهٔ واقعی، با دادهٔ ساختگی کار میکنیم تا رفتار درخواست و پاسخ روشن بماند.
سرور دو معنای رایج دارد: دستگاه یا محیطی که برنامه روی آن اجرا میشود، و خود برنامهای که به درخواست پاسخ میدهد. لپتاپ شما برای آزمایش میتواند میزبان یک سرور HTTP محلی باشد. VPS یک ماشین مجازی میزبانیشده است و Node.js نرمافزاری است که میتواند روی آن اجرا شود. این دو رقیب یکدیگر نیستند. برای شناخت زیرساخت، دورهٔ لینوکس مقدماتی درسآوند را میتوانید در ادامه مطالعه کنید: https://www.darsavand.com/courses/linux-server-from-zero
کاربردهایی که برنامهنویس واقعاً با آنها روبهرو میشود
ساخت API برای وب و موبایل، دریافت و پردازش رویداد، اتصال به سرویسهای دیگر، ابزار خط فرمان و اجرای ابزارهای توسعه از کاربردهای مهماند. مثلاً سامانهٔ تیکت باید درخواست کاربر را بگیرد، آن را ثبت کند و فهرست مجاز را برگرداند. یک ابزار داخلی هم ممکن است فایلهای گزارش را بررسی و خلاصه تولید کند. استفاده از Node برای ساخت پروژهٔ React به معنی آن نیست که همهٔ کد رابط در سرور اجرا میشود؛ ابزار ساخت و برنامهٔ نهایی نقشهای جدا دارند.
در کارهای ورودی و خروجی، برنامه زمان زیادی منتظر دیسک، شبکه یا پایگاه داده میماند. APIهای ناهمگام به Node کمک میکنند هنگام انتظار، کار درخواستهای دیگر را نیز پیش ببرد. این ویژگی تضمین سرعت نامحدود نیست. یک حلقهٔ بسیار سنگین یا پردازش تصویر طولانی در رشتهٔ اجرای جاوااسکریپت میتواند پاسخگویی را کند کند. برای چنین مسئلهای باید اندازهگیری و طراحی مناسب، مانند صف کار یا worker، داشت؛ نوشتن async پیش از یک تابع بهتنهایی محاسبهٔ سنگین را موازی نمیکند.
تمرین تصمیمگیری و پاسخ
سه نیاز را طبقهبندی کنید: نمایش دکمهٔ باز و بستهشدن منو؛ ارائهٔ فهرست تیکتهای مجاز یک کاربر؛ و تبدیل هزاران تصویر بزرگ. برای هرکدام بنویسید کدام قسمت در مرورگر قرار میگیرد، آیا سرور لازم است و چه ریسکی دارد. پاسخ راهنما: منو معمولاً رفتار رابط است؛ فهرست تیکت به کنترل مجوز در سرور نیاز دارد؛ تبدیل تصویر کار محاسباتی و مصرفکنندهٔ حافظه است و باید جدا از مسیر پاسخ سریع بررسی شود. معیار تحویل، توضیح دلیل انتخاب است، نه انتخاب یک فناوری برای همهٔ مسئلهها.
منابع رسمی برای ادامهٔ مطالعه
معرفی Node.js: https://nodejs.org/learn/getting-started/introduction-to-nodejs
تفاوت با مرورگر: https://nodejs.org/learn/getting-started/differences-between-nodejs-and-the-browser
مدل کار ناهمگام: https://nodejs.org/learn/asynchronous-work/overview-of-blocking-vs-non-blocking
متن فارسی، سناریوها و مثالها: تألیف مستقل تحریریه درسآوند.
متن درسهای عمومی را بدون ورود بخوانید.