FA-TOOLS — Header Component
آموزش نود جی اس

آموزش نود جی اس (Node.js): از مفاهیم پایه تا ساخت اولین وب‌سرور واقعی

فهرست مطالب

  • نود جی اس چیست و چگونه کار می‌کند؟
  • مقایسه نود جی اس با سایر محیط‌های اجرا
  • مراحل نصب و راه‌اندازی محیط توسعه
  • ساخت اولین وب‌سرور با Node.js
  • توسعه وب API با فریم‌ورک Express.js
  • مدیریت عملیات غیرهمزمان و معماری Event Loop
  • عیب‌یابی سریع و رفع خطاهای رایج
  • پرسش‌های متداول

خلاصه سریع: نود جی اس (Node.js) یک محیط اجرای سمت سرور برای زبان جاوااسکریپت است که بر پایه موتور V8 گوگل ساخته شده است. این ابزار به دلیل معماری غیربلاک‌کننده (Non-blocking I/O) و رویدادمحور (Event-Driven)، گزینه‌ای ایده‌آل برای ساخت برنامه‌های مقیاس‌پذیر، Real-time و سرویس‌های Restful API محسوب می‌شود.

نود جی اس امکان اجرای کد جاوااسکریپت را خارج از مرورگر فراهم می‌کند تا بتوانید به مرورگر محدود نمانید و برنامه‌های سمت سرور بنویسید. در این آموزش عملی، معماری نود جی اس، نحوه ساخت وب‌سرور، کار با فریم‌ورک Express و اصول مدیریت حافظه و خطایابی در محیط پروژه‌های واقعی را یاد می‌گیرید.

نود جی اس چیست و چگونه کار می‌کند؟

نود جی اس چیست و چگونه کار می‌کند؟

پاسخ کوتاه: نود جی اس یک محیط اجرای (Runtime Environment) متن‌باز و فرامتقاطع برای جاوااسکریپت است. نود جی اس بر روی موتور V8 کروم اجرا می‌شود و کدهای جاوااسکریپت را مستقیماً به کد ماشین تبدیل می‌کند تا بدون نیاز به مرورگر، روی سرور اجرا شوند.

برخلاف مدل‌های سنتی مانند PHP یا ASP.NET که برای هر درخواست کاربر یک ترد (Thread) جدید اختصاص می‌دهند، Node.js از معماری تک‌تردی (Single-Threaded) همراه با حلقه رویداد (Event Loop) استفاده می‌کند. این ویژگی باعث می‌شود سرور بتواند هزاران اتصال هم‌زمان را با مصرف بسیا کم حافظه RAM مدیریت کند.

اگر با مرورگرها کار کرده باشید، حتماً با تکه‌کدهای جاوااسکریپت برای مدیریت DOM آشنا هستید. اما در نود جی اس اشیایی مثل window یا document وجود ندارند؛ در عوض شما به ماژول‌های سیستم‌عامل، فایل‌سیستم (FS)، شبکه (Net) و مسیرها (Path) دسترسی مستقیم دارید.

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

نود جی اس کاملاً تک‌تردی نیست! اگرچه کدهای جاوااسکریپتی شما روی یک ترد اصلی (Main Thread) اجرا می‌شوند، اما Node.js در پس‌زمینه برای عملیات سنگین I/O یا رمزنگاری، از کتابخانه Libuv و ترد‌پول (Thread Pool) متصل به سیستم‌عامل استفاده می‌کند. بنابراین تک‌تردی بودن به معنی عجز نود جی اس در مواجهه با کارهای سنگین پس‌زمینه نیست.

مقایسه نود جی اس با سایر محیط‌های اجرا

مقایسه نود جی اس با سایر محیط‌های اجرا

برای انتخاب درست ابزار توسعه، باید بدانید Node.js در مقایسه با سایر زبان‌ها و پلتفرم‌های سمت سرور چه جایگاهی دارد:

ویژگی مقدار / وضعیت در Node.js
مدل معماری (I/O) غیربلاک‌کننده و رویدادمحور (Asynchronous)
مدیریت درخواست‌ها یک ترد اصلی برای مدیریت میلیون‌ها اتصال (Event Loop)
مناسب برای برنامه‌های چت Real-time، APIهای پرسرعت، میکرو‌سرویس‌ها، اینترنت اشیاء
نامناسب برای پردازش‌های سنگین ریاضی، پردازش تصویر/ویدیو، یادگیری ماشین سنگین
مدیریت پکیج‌ها NPM (بزرگ‌ترین اکوسیستم پکیج‌های نرم‌افزاری جهان)

مراحل نصب و راه‌اندازی محیط توسعه

مراحل نصب و راه‌اندازی محیط توسعه

برای شروع کار با نود جی اس، مراحل زیر را گام‌به‌گام انجام دهید:

  1. دانلود نسخه LTS: به سایت رسمی Node.js مراجعه کنید و نسخه LTS (پشتیبانی بلندمدت) را دانلود نمایید. این نسخه بالاترین میزان پایداری را در پروژه‌های واقعی دارد.
  2. نصب بسته: فایل دانلود شده را باز کرده و با فشردن Next مراحل نصب استاندارد را طی کنید. حتماً گزینه افزودن به PATH را فعال بگذارید.
  3. بررسی نصب در ترمینال: ترمینال (CMD یا Terminal) را باز کنید و دستورات زیر را وارد کنید تا از نصب موفقیت‌آمیز مطمئن شوید:

    node -v
    npm -v
  4. ساخت پوشه پروژه: یک پوشه جدید در سیستم بسازید، وارد آن شوید و دستور راه‌اندازی پروژه را اجرا کنید:

    mkdir my-node-app
    cd my-node-app
    npm init -y

دستور npm init -y یک فایل به نام package.json ایجاد می‌کند که مشخصات پروژه و کتابخانه‌های نصب‌شده را مدیریت خواهد کرد. اگر علاوه بر نود جی اس قصد ساخت برنامه‌های دسکتاپ یا یادگیری ابزارهای گرافیکی پایتون را دارید، مطالعه آموزش pyqt5 می‌تواند دید خوبی به شما درباره تفاوت برنامه‌نویسی دسکتاپ و وب بدهد.

ساخت اولین وب‌سرور با Node.js

ساخت اولین وب‌سرور با Node.js

پاسخ کوتاه: برای ساخت وب‌سرور در نود جی اس بدون نیاز به ابزار جانبی، کافی است ماژول داخلی http را فراخوانی کرده و متد createServer را روی یک پورت مشخص اجرا کنید.

یک فایل به نام server.js در پوشه پروژه بسازید و کدهای زیر را درون آن بنویسید:

const http = require('http');

const PORT = 3000;

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
    res.end('سلام! این اولین وب‌سرور من با نود جی اس است.');
});

server.listen(PORT, () => {
    console.log(`سرور روی آدرس http://localhost:${PORT} فعال شد.`);
});

حالا برای اجرای سرور در ترمینال دستور زیر را بزنید:

node server.js

مرورگر را باز کنید و به آدرس http://localhost:3000 بروید. پیام شما روی صفحه نمایش داده می‌شود!

توسعه وب API با فریم‌ورک Express.js

توسعه وب API با فریم‌ورک Express.js

ماژول داخلی http برای پروژه‌های بزرگ کمی پیچیده است زیرا مسیریابی (Routing) و مدیریت پارامترها در آن سخت می‌شود. برای این کار از فریم‌ورک محبوب Express.js استفاده می‌کنیم.

ابتدا Express را نصب کنید:

npm install express

کد زیر یک API ساده استاندارد برای دریافت و ارسال اطلاعات JSON ایجاد می‌کند:

const express = require('express');
const app = express();

app.use(express.json());

// مسير GET اصلی
app.get('/api/users', (req, res) => {
    res.json([
        { id: 1, name: 'علی' },
        { id: 2, name: 'سارا' }
    ]);
});

// مسیر POST برای دریافت داده
app.post('/api/users', (req, res) => {
    const newUser = req.body;
    res.status(201).json({ message: 'کاربر ایجاد شد', user: newUser });
});

app.listen(5000, () => {
    console.log('API روی پورت 5000 آماده پاسخگویی است.');
});

اگر علاوه بر توسعه سمت سرور، نیازمند یادگیری ابزارهای تحلیل یا کدهای سمت سرور دیگر هستید، بررسی مجموعه‌های کدهای آماده پایتون در کنار جاوااسکریپت، دید کامل‌تری برای طراحی سیستم‌های توزیع‌شده به شما می‌دهد.

مدیریت عملیات غیرهمزمان و معماری Event Loop

قلب تپنده نود جی اس، نحوه مدیریت رفتارهای غیرهمزمان (Asynchronous) است. هنگام خواندن فایل از دیسک یا خواندن داده از دیتابیس، نود جی اس منتظر نمی‌ماند و بلافاصله به سراغ اجرای درخواست بعدی می‌رود.

استفاده از Async/Await و مدیریت خطا

بهترین و تمیزترین روش برای خواندن اطلاعات غیرهمزمان، بهره‌گیری از الگوی async/await به همراه ساختار try...catch است:

const fs = require('fs').promises;

async function readFileData() {
    try {
        const data = await fs.readFile('data.txt', 'utf-8');
        console.log('محتوای فایل:', data);
    } catch (error) {
        console.error('خطا در خواندن فایل:', error.message);
    }
}

readFileData();
  • هرگز از توابع Sync مانند readFileSync در کدهای اصلی وب‌سرور استفاده نکنید؛ زیرا Event Loop را کاملاً قفل (Block) می‌کند.
  • پرومیس‌های رد شده (Unhandled Rejections) را حتماً مدیریت کنید تا برنامه‌تان ناگهانی کرش نکند.

عیب‌یابی سریع و رفع خطاهای رایج

هنگام توسعه برنامه با نود جی اس، ممکن است با چند خطای متداول مواجه شوید. جدول عیب‌یابی زیر راه‌حل سریع آنهاست:

۱. خطای Error: listen EADDRINUSE :::3000

علت: پورت مورد نظر (در اینجا ۳۰۰۰) توسط برنامه‌ای دیگر یا یک پروسه قبلی نود جی اس اشغال شده است.
راه‌حل: شماره پورت را در کد تغییر دهید، یا در ترمینال با دستور npx kill-port 3000 پروسه قبلی را ببندید.

۲. خطای Cannot find module ‘express’

علت: پکیج مورد نظر در پوشه node_modules وجود ندارد یا دستور نصب اجرا نشده است.
راه‌حل: ترمینال را در مسیر اصلی پروژه باز کنید و دستور npm install را دوباره بزنید.

۳. خطای ERR_HTTP_HEADERS_SENT

علت: سعی کرده‌اید به یک درخواست کاربر، بیش از یک بار پاسخ (res.send یا res.json) ارسال کنید.
راه‌حل: مطمئن شوید قبل از دستور دوم ارسال پاسخ، کلیدواژه return قرار داده‌اید.

پرسش‌های متداول

آیا یادگیری نود جی اس برای مبتدیان سخت است؟

اگر با مفاهیم پایه جاوااسکریپت (مثل Variable، Function، Promise) آشنا باشید، یادگیری نود جی اس بسیار سریع و روان خواهد بود زیرا همان زبان را در سمت سرور استفاده می‌کنید.

تفاوت اصلی Node.js و NPM چیست؟

Node.js محیط اجرای کدهای جاوااسکریپت است، در حالی که NPM (Node Package Manager) ابزار مدیریت بسته‌ها و کتابخانه‌های جانبی است که همراه با نصب نود جی اس روی سیستم قرار می‌گیرد.

چه زمانی نباید از Node.js استفاده کنیم؟

برای پروژه‌هایی که پردازش‌های سنگین ریاضی و CPU-Bound (مانند رندر ویدیو یا الگوریتم‌های هوش مصنوعی محلی) دارند، بهتر است به سراغ پایتون یا Go بروید؛ زیرا پردازش سنگین در ترد اصلی نود جی اس بقیه درخواست‌ها را متوقف می‌کند.

آیا نود جی اس یک فریم‌ورک است؟

خیر، نود جی اس فریم‌ورک نیست بلکه یک محیط اجرای برنامه‌نویسی (Runtime Environment) است. فریم‌ورک‌های متعددی مثل Express.js، NestJS و Koa روی نود جی اس ساخته شده‌اند.

برای مشاهده پروژه‌ها و برنامه‌های بیشتر در زمینه کدنویسی، می‌توانید از مجموعه اسنیپت‌های کاربردی سایت بازدید کنید.

سوالات متداول

نود جی اس برای چه پروژه‌هایی مناسب است؟

نود جی اس برای ساخت برنامه‌های Real-time مانند چت‌روم‌ها، سامانه‌های آنلاین، برنامه‌های مبتنی بر اینترنت اشیاء (IoT) و RESTful APIهای پرسرعت بسیار عالی است.

آیا برای یادگیری نود جی اس باید جاوا اسکریپت بدانیم؟

بله، از آنجایی که Node.js محیط اجرای جاوااسکریپت در سمت سرور است، تسلط بر مفاهیم پایه و پیشرفته زبان جاوااسکریپت پیش‌نیاز اصلی یادگیری آن محسوب می‌شود.

تفاوت نسخه LTS و Current در نود جی اس چیست؟

نسخه LTS دارای پشتیبانی بلندمدت، بالاترین میزان پایداری و مناسب پروژه‌های واقعی است؛ اما نسخه Current جدیدترین ویژگی‌ها را داشته و ممکن است پایداری کمتری داشته باشد.

چرا از فریم‌ورک Express.js در نود جی اس استفاده می‌شود؟

اکسپرس مدیریت مسیرها (Routing)، درخواست‌ها و پاسخ‌ها را ساده‌تر کرده و فرآیند توسعه APIها و وب‌اپلیکیشن‌های پیچیده را بسیار سریع‌تر و تمیزتر می‌سازد.

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

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