Node.js چیست؟ آموزش نصب نود جی اس
- ماهیت فنی Node.js
- زبان های مورد استفاده در ساخت Node.js
- معماری Node.js و نحوه کار آن
- ویژگی های کلیدی Node.js
- کاربردهای Node.js
- اندازه بازار و استفاده های محبوب
- آیا Node.js یک زبان برنامه نویسی است؟
- Node.js در طرف کلاینت یا سرور است؟
- شروع به کار با Node.js
- نصب Node.js
- بررسی نسخه Node.js
- NPM چیست؟
- نصب بسته های NPM از طریق خط فرمان
- مثال Hello World در Node.js
- ساخت سرور با استفاده از Express
- جمع بندی
شما احتمالاً با جاوااسکریپت به عنوان یکی از پرکاربردترین زبان های برنامه نویسی جهان آشنا هستید. این زبان میلیون ها وب سایت را به حرکت درمی آورد و هزاران توسعه دهنده و طراح را به سمت ساخت ویژگی های وب جذب کرده است. برای افراد جدید در برنامه نویسی، جاوااسکریپت یکی از بهترین زبان هایی است که می توانید یاد بگیرید.
برای بیش از 20 سال، جاوااسکریپت عمدتاً برای اسکریپت های سمت کلاینت استفاده می شد. از آنجایی که جاوااسکریپت فقط درون تگ <script> قابل استفاده بود، توسعه دهندگان مجبور بودند بین مولفه های فرانت اند و بک اند از چندین زبان و فریم ورک مختلف استفاده کنند. سپس Node.js ظاهر شد که یک محیط اجرا است و تمامی موارد لازم برای اجرای برنامه های جاوااسکریپت را فراهم می کند.
Node.js یک محیط اجرای تک رشته ای، متن باز و چندپلتفرمی برای ساخت برنامه های سرورساید و شبکه ای سریع و مقیاس پذیر است. این محیط از موتور V8 جاوااسکریپت استفاده می کند و با معماری رویدادمحور و غیرمسدودکننده ورودی/خروجی، کارآمد و مناسب برای برنامه های بلادرنگ طراحی شده است.
ماهیت فنی Node.js
نود جی اس یک محیط اجرایی متن باز و چندسکویی برای اجرای کدهای جاوااسکریپت در سمت سرور است. این محیط با ترکیب موتور V8 گوگل، کتابخانه های سیستمی و معماری خاص خود توانسته به یکی از محبوب ترین ابزارهای توسعه وب و اپلیکیشن های مقیاس پذیر تبدیل شود.
زبان های مورد استفاده در ساخت Node.js
Node.js با استفاده از زبان های C، C++ و جاوااسکریپت نوشته شده است. ویکی پدیا Node.js را به عنوان «مجموعه ای از موتور V8 جاوااسکریپت گوگل، لایه انتزاعی پلتفرم libuv و کتابخانه اصلی که عمدتاً به زبان جاوااسکریپت نوشته شده است» تعریف می کند. این محیط اجرا از موتور V8 کروم درونی استفاده می کند که موتور اجرای جاوااسکریپت است و خود به زبان C++ نوشته شده است. این ویژگی های اضافی به Node.js اضافه می کند، مانند دسترسی به عملکردهای داخلی سیستم (مانند شبکه).
معماری Node.js و نحوه کار آن
Node.js از معماری “حلقه رویداد تک رشته ای” برای پردازش چندین کلاینت به صورت همزمان استفاده می کند. برای درک این تفاوت با محیط های دیگر، باید بدانید که در زبان هایی مانند جاوا، چگونه درخواست های همزمان پردازش می شوند.
در مدل چندرشته ای request-response، هر درخواست کلاینت توسط یک رشته جداگانه پردازش می شود. این رشته ها از یک استخر رشته ها (thread pool) استفاده می کنند. هر بار که درخواستی وارد می شود، یک رشته به آن اختصاص داده می شود.
اما Node.js به صورت متفاوتی کار می کند. مراحل پردازش درخواست ها به شرح زیر است:
- Node.js یک استخر رشته های محدود برای پردازش درخواست ها نگهداری می کند.
- هر بار که درخواستی وارد می شود، Node.js آن را در صف قرار می دهد.
- حلقه رویداد تک رشته ای (که قلب سیستم است) درخواست ها را به طور مداوم بررسی می کند.
- هنگامی که درخواستی وارد می شود، حلقه رویداد آن را از صف برداشته و بررسی می کند که آیا نیاز به عملیات ورودی/خروجی مسدودکننده دارد یا خیر. اگر نیاز نباشد، درخواست را پردازش کرده و پاسخ را می فرستد.
- اگر درخواست نیاز به عملیات مسدودکننده داشته باشد، حلقه رویداد یک رشته از استخر رشته های داخلی را به پردازش آن اختصاص می دهد. تعداد رشته های داخلی محدود است و این گروه رشته های کمکی را “گروه کارگر” می نامند.
- حلقه رویداد درخواست های مسدودکننده را ردیابی کرده و پس از اتمام عملیات مسدودکننده، آن ها را در صف قرار می دهد. این روش باعث می شود که Node.js خاصیت غیرمسدودکننده خود را حفظ کند.
از آنجایی که Node.js از رشته های کمتری استفاده می کند، منابع و حافظه کمتری مصرف می کند و اجرای وظایف سریع تر است. بنابراین، برای نیازهای ما، این معماری تک رشته ای معادل معماری چندرشته ای است. اما برای وظایف پردازشی سنگین، استفاده از زبان های چندرشته ای مانند جاوا مناسب تر است. در حالی که برای برنامه های بلادرنگ، Node.js گزینه واضح است.
ویژگی های کلیدی Node.js
Node.js در سال های اخیر به سرعت رشد کرده است. این امر به دلیل لیست گسترده ای از ویژگی هایی است که ارائه می دهد:
- آسان بودن: Node.js به راحتی قابل شروع است و برای مبتدیان توسعه وب گزینه مناسبی است. با وجود تعداد زیادی آموزش و جامعه بزرگ، شروع به کار آن بسیار ساده است.
- مقیاس پذیری: به دلیل معماری تک رشته ای، Node.js قادر به پردازش تعداد زیادی اتصال همزمان با تراکم بالا است.
- سرعت: اجرای غیرمسدودکننده رشته ها، Node.js را حتی سریع تر و کارآمدتر می کند.
- بسته های NPM: مجموعه گسترده ای از بسته های متن باز Node.js موجود است که کار شما را ساده تر می کند. اکنون بیش از یک میلیون بسته در اکوسیستم NPM وجود دارد.
- پشتیبانی چندپلتفرمی: پشتیبانی از چند پلتفرم به شما امکان می دهد وب سایت های SaaS، برنامه های دسکتاپ و حتی برنامه های موبایل را با Node.js بسازید.
- قابلیت نگهداری: Node.js به دلیل استفاده از یک زبان واحد (جاوااسکریپت) برای فرانت اند و بک اند، انتخاب آسانی برای توسعه دهندگان است.
کاربردهای Node.js
Node.js در انواع مختلفی از برنامه ها استفاده می شود. برخی از کاربردهای محبوب عبارتند از:
- چت های بلادرنگ: به دلیل ماهیت تک رشته ای و غیرهمزمان، Node.js برای پردازش ارتباطات بلادرنگ مناسب است. این فریم ورک به راحتی قابل مقیاس پذیری است و اغلب در ساخت ربات های چت استفاده می شود. همچنین ساخت ویژگی های اضافی چت مانند چت چندنفره و اعلان های پوش را آسان می کند.
- اینترنت اشیا (IoT): برنامه های IoT معمولاً شامل چندین سنسور هستند که اطلاعات کوچکی را ارسال می کنند و می توانند به تعداد زیادی درخواست تبدیل شوند. Node.js به خاطر توانایی پردازش سریع این درخواست های همزمان، گزینه مناسبی است.
- جریان داده ها: شرکت هایی مانند Netflix از Node.js برای پخش استفاده می کنند. این امر عمدتاً به دلیل سبک و سریع بودن Node.js و همچنین ارائه API جریان داده های داخلی است. این جریان ها به کاربران امکان می دهند درخواست ها را به هم متصل کنند و داده ها را مستقیماً به مقصد نهایی پخش کنند.
- برنامه های تک صفحه ای پیچیده (SPAs): در SPAs، کل برنامه در یک صفحه بارگذاری می شود. این معمولاً به معنای انجام چندین درخواست در پس زمینه برای اجزای خاص است. حلقه رویداد Node.js در اینجا کمک می کند، زیرا درخواست ها را به صورت غیرمسدودکننده پردازش می کند.
- برنامه های مبتنی بر REST API: جاوااسکریپت در فرانت اند و بک اند استفاده می شود. بنابراین، سرور می تواند به راحتی با فرانت اند از طریق REST API ارتباط برقرار کند. Node.js همچنین بسته هایی مانند Express.js و Koa را ارائه می دهد که ساخت برنامه های وب را آسان تر می کند.
اندازه بازار و استفاده های محبوب
در دو دهه اخیر، رشد چشمگیری در تعداد وب سایت ها رخ داده است و به طور مورد انتظار، Node.js نیز به سرعت در حال رشد است. این محیط اجرای محبوب در سال 2018 از مرز یک میلیارد دانلود عبور کرد و بر اساس آمار W3Techs، Node.js توسط 1.2% از تمام وب سایت های جهان استفاده می شود. این معادل بیش از 20 میلیون وب سایت در سراسر اینترنت است.
بدون شک، این محیط اجرا در میان میلیون ها شرکت نیز محبوب است. برخی از شرکت های معروفی که امروز از Node.js استفاده می کنند عبارتند از:
- Spotify
- eBay
- GoDaddy
آیا Node.js یک زبان برنامه نویسی است؟
به طور خلاصه: خیر.
Node.js یک زبان برنامه نویسی نیست. بلکه یک محیط اجرا است که برای اجرای جاوااسکریپت خارج از مرورگر استفاده می شود.
همچنین Node.js یک فریم ورک (پلتفرم برای توسعه نرم افزار) نیست. محیط اجرای Node.js بر روی یک زبان برنامه نویسی (در این مورد جاوااسکریپت) ساخته شده است و به اجرا کردن فریم ورک ها کمک می کند.
خلاصه اینکه، Node.js نه یک زبان برنامه نویسی است و نه یک فریم ورک؛ بلکه محیطی برای آن ها است.
Node.js در طرف کلاینت یا سرور است؟
یک اشتباه رایج بین توسعه دهندگان این است که Node.js یک فریم ورک بک اند است و تنها برای ساخت سرور استفاده می شود. این درست نیست: Node.js می تواند هم در طرف کلاینت و هم سرور استفاده شود.
دلیل محبوبیت فریم ورک های Node.js برای توسعه دهندگان ساخت بک اند انعطاف پذیر و مقیاس پذیر، ماهیت رویدادمحور و غیرمسدودکننده آن است. با این حال، توسعه دهندگان فرانت اند نیز مزایای Node.js را در کار خود به وضوح مشاهده خواهند کرد.
دلایل موفقیت Node.js در هر دو طرف عبارتند از:
- قابلیت استفاده مجدد: جاوااسکریپت زبان مشترکی است که برای نوشتن بک اند و فرانت اند با استفاده از فریم ورک هایی مانند Express.js و Meteor.js استفاده می شود. برخی از استک های محبوب مانند MERN از Express.js به عنوان بک اند (یک فریم ورک Node.js) استفاده می کنند. بسیاری از اجزا می توانند بین فرانت اند و بک اند استفاده مجدد شوند.
- بهره وری و کارایی توسعه دهنده: به دلیل کاهش تغییر زمینه بین چندین زبان، زمان زیادی از توسعه دهنده صرفه جویی می شود. استفاده از جاوااسکریپت برای هر دو بخش (فرانت اند و بک اند) منجر به افزایش کارایی می شود، زیرا ابزارهای زیادی برای هر دو بخش مشترک هستند.
- جامعه بزرگ: جامعه فعال آنلاین نقش مهمی در سرعت چرخه توسعه موفق دارد. هنگامی که در مسئله ای گیر می کنید، احتمالاً کسی قبلاً آن را حل کرده و راه حل را در Stack Overflow به اشتراک گذاشته است. Node.js از این جامعه به خوبی استفاده می کند که در مورد محیط اجرای محبوب و بسته های آن فعال و مشارکت پذیر است.
شروع به کار با Node.js
اولین قدم نصب آن بر روی سیستم عامل مورد استفاده شماست
نصب Node.js
اگر قبلاً Node.js را نصب نکرده اید، می توانید آن را بر اساس سیستم عامل خود نصب کنید:
روی macOS
با استفاده از Bash:
curl "https://nodejs.org/dist/latest/node-${VERSION :-$(wget -qO- https://nodejs.org/dist/latest/ | sed -nE 's|.*>node-(.*)\.pkg.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"Code language: JavaScript (javascript)
با استفاده از Homebrew:
brew install node
روی Windows
- مستقیماً از سایت nodejs.org نسخه Windows Installer را دانلود کنید.
روی Linux (Ubuntu 18.04+)
sudo apt update
sudo apt install nodejs
بررسی نسخه Node.js
پس از نصب، می توانید نسخه نصب شده را با دستور زیر بررسی کنید:
node -v
یا
node --version
خروجی مشابه زیر خواهد بود (شماره نسخه ممکن است متفاوت باشد):
v14.16.0Code language: CSS (css)
NPM چیست؟
NPM (Node Package Manager) اکوسیستم بسته های Node.js است. این بزرگ ترین اکوسیستم متن باز در جهان با بیش از یک میلیون بسته و رشد روزافزون است. NPM رایگان است و هزاران توسعه دهنده متن باز روزانه به آن مشارکت می کنند.
NPM همراه با یک ابزار خط فرمان به صورت پیش فرض نصب می شود. شما می توانید به سایت NPM بروید، بسته مورد نظر را جستجو کرده و با یک دستور ساده آن را نصب کنید. همچنین می توانید نسخه بندی بسته ها، بررسی وابستگی ها و حتی تنظیم اسکریپت های سفارشی در پروژه های خود را از طریق این ابزار خط فرمان مدیریت کنید.
نصب بسته های NPM از طریق خط فرمان
هنگامی که Node.js را نصب می کنید، NPM به طور خودکار نیز نصب می شود. دستور نصب یک بسته به شرح زیر است:
npm install <package-name>Code language: HTML, XML (xml)
بله، این قدر ساده است! شما می توانید چندین بسته را همزمان نصب کنید:
npm install <pkg-1> <pkg-2> <pkg-3>Code language: HTML, XML (xml)
هنگامی که یک برنامه جدید را شروع می کنید، NPM به طور خودکار فایل package.json ایجاد می کند که شامل تمام بسته های NPM است. در اینجا می توانید نسخه ها، وابستگی ها و اسکریپت های سفارشی را مشخص کنید.
NPM دستورات متعددی دارد، از جمله publish، audit، run و غیره. برای مشاهده نحوه استفاده از این دستورات، از دستور npm help استفاده کنید.
مثال Hello World در Node.js
همانطور که همیشه، ابتدا با برنامه ساده “Hello World” شروع می کنیم. در این مثال، یک سرور در Node.js ایجاد می کنیم که درخواست سرور را با پاسخ “Hello World” پردازش می کند.
ابتدا فایل server.js را با محتوای زیر ایجاد کنید:
// server.js
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World! Welcome to Node.js');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});Code language: JavaScript (javascript)
سپس فایل را با نام server.js ذخیره کنید. در ترمینال، دستور زیر را اجرا کنید:
node server.jsCode language: CSS (css)
سرور شروع به کار می کند. برای بررسی خروجی، آدرس http://localhost:3000 را در مرورگر خود باز کنید. باید پیام زیر را ببینید:
Hello World! Welcome to Node.jsCode language: CSS (css)
توضیح سرور Hello World
Node.js یک ماژول داخلی به نام “HTTP” دارد که امکان انتقال داده ها از طریق پروتکل HTTP را فراهم می کند.
در کد فوق، ابتدا ماژول http را بارگذاری می کنیم. سپس از متد createServer برای پذیرش درخواست و ارسال پاسخ با کد وضعیت استفاده می کنیم. در نهایت، در پورت مشخص شده گوش می دهیم.
تبریک! شما اولین سرور خود را در Node.js ایجاد کرده اید. در بخش بعدی، نحوه استفاده از فریم ورک Express برای ساخت سرور را خواهیم یاد گرفت.
ساخت سرور با استفاده از Express
ابتدا باید بدانید که یک سرور مسئول پردازش درخواست های کلاینت از طریق نرم افزار (معمولاً Apache یا Nginx)، انجام وظایف مورد نیاز و ارسال پاسخ به کلاینت است. Express یک فریم ورک است که به ما کمک می کند سروری در Node.js بسازیم.
Express.js یک فریم ورک حداقل و انعطاف پذیر برای توسعه وب در Node.js است که مجموعه ای قوی از ویژگی ها برای برنامه های وب و موبایل ارائه می دهد. این فریم ورک امکان اضافه کردن جداول مسیر (route tables) و تنظیم میان افزار (middleware) را فراهم می کند. شما می توانید Express را با دستور زیر نصب کنید:
npm install express --save
در بخش قبلی، ما از ماژول داخلی http برای ساخت سرور استفاده کردیم. حالا، یک سرور “Hello World” با Express.js ایجاد می کنیم.
فایل server-express.js را با محتوای زیر ایجاد کنید:
// server-express.js
const express = require('express')
const app = express() // initialize app
const port = 3000
// GET callback function returns a response message
app.get('/', (req, res) => {
res.send('Hello World! Welcome to Node.js')
})
app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`)
})Code language: JavaScript (javascript)
سپس سرور را با دستور زیر اجرا کنید:
node server-express.jsCode language: CSS (css)
حالا آدرس http://localhost:3000 را در مرورگر باز کنید تا پیام “Hello World” را ببینید.
جمع بندی
به طور خلاصه، Node.js یک محیط برنامه نویسی محبوب است که برای ساخت برنامه های پرمقیاس با پشتیبانی از درخواست های همزمان استفاده می شود. معماری تک رشته ای و غیرمسدودکننده ورودی/خروجی آن، آن را برای برنامه های بلادرنگ و جریان داده ها انتخاب عالی می کند.
برای تقویت بیشتر، Node.js دارای جامعه بزرگی از توسعه دهندگان فعال است و بزرگ ترین مخزن متن باز در جهان (NPM) را دارد که اکنون بیش از یک میلیون بسته را شامل می شود.شروع به کار با Node.js بسیار ساده است. در این مقاله، نحوه نصب و ساخت سرور در Node.js را آموزش دادیم. حالا تنها کاری که باقی مانده است، این است که به فکر این باشید که چگونه Node.js را در استک خود پیاده سازی خواهید کرد. همچنین می توانید با مراجعه به مستندات رسمی Node.js در nodejs.dev، دانش خود را گسترش دهید و با شرکت در بوت کمپ آموزش نود جی اس فاتحی اسکول با تدریس Milad Cheraghi به یک متخصص آماده برای بازار کار تبدیل شوید.