Node.js چیست ؟ و شروع با آن

مدتی هست که صحبت های زیادی در مورد Node.js به شدت زیاد شده طوری که در هر محفل برنامه نویسی حضور پیدا میکنم معمولا در مورد Node.js مطالبی ارائه می شود من هم تصمیم گرفتم در مورد Node.js مقاله ای بنویسم طوری که کاربران با این موضوع بیشتر آشنا شوند و اصلا بدونند این Node.js چی هست و اگه به درد میخوره چطور ازش استفاده کنیم . اگه دنبال این هستید یک دید کلی در زمینه Node.js پیدا کنید با ما همراه باشید چون در انتها این مقاله به نکات جالبی دست پیدا خواهید کرد .

برنامه نویسی Event-Driven یا رویدادمحور به سبک خاصی از برنامه نویسی گفته می‌شود که در آن روند اجرای برنامه توسط رویدادها تعیین می‌شود. Node.js نیز یکی از زبان‌های برنامه‌نویسی است که طبق معماری رویداد محور عمل می‌کند.
همین موضوع باعث شده تا یادگیری این زبان برای مبتدیان سخت باشد ولی سرعت اجرای بالا در node.js محبوبیت زیادی در میان برنامه‌نویسان دارد. در این مطلب برخی از اصول پایه‌ای node.js معرفی شده که شناخت بهتری را به کاربران می‌دهد.

Node.js چیست

معرفی Node.js :

چیزی که در ویکی پدیا نوشته شده :

نود.جی‌اس (به انگلیسی: Node.js) یک چارچوب نرم‌افزاری ورودی/خروجی برای پایهٔ رویداد (به انگلیسی: Event) برای موتور جاوااسکریپت وی۸ (به انگلیسی: V8) برای سکوهای شبه یونیکس است که توسط رایان دال (به انگلیسی: Ryan Dahl) ساخته شده و رشد آن توسط جوینت (به انگلیسی: Joyent) که دال را استخدام کرده‌است حمایت می‌شود.

Node.js به هدف این است که مشابه توئیستد (به انگلیسی: Twisted) برای پایتون، Perl Object Environment برای پرل و EventMachine برای روبی شود. Node، بر خلاف جاوااسکریپت در مرورگر اجرا نمی‌شود بلکه به جاوااسکریپت تحت کارساز مربوط است. Node.js برخی مشخصات CommonJS را پیاده سازی می‌کند. Node.js شامل یک محیط یک محیط REPL (حلقهٔ خواندن-اجرا کردن-چاپ کردن) برای آزمایش گرفتن تعاملی است.

V8 چیست ؟

V8 موتور اجرای جاوا اسکریپت ساخته شده برای گوگل کروم و انتشار یافته است به صورت متن باز که نوشته شده توسط گوگل با زبان C++ و machine code به جای تفسیر آن در زمان واقعی است.
Node.js و با استفاده از libuv که مسئولیت رسیدگی به حوادث ناهمزمان است کار میکند. Libuv یک لایه انتزاعی برای شبکه و سیستم فایل قابلیت در هر دو ویندوز و پازیکس ایجاد میکند – که سیستم های مبتنی بر مانند لینوکس، مک OS X، OSS در بدون توقف و یونیکس.
قابلیت های اصلی Node.js ساکن بودن در یک کتابخانه جاوا اسکریپت است. اتصالات Node.js و، نوشته شده در زبان C ++، این فناوری به یکدیگر و به سیستم عامل ارتباط برقرار کنند.

آموزش nodejsالبته این توضیح در مورد Node.js زیاد دلچسب و خودمونی نیست و یکم سخته فهمیدنش ، پس خودمون باید یه توضیح درست و دقیق در مورد این Node.js بدیم ، اولا بگم node.js هیچ ربطی به مرورگر نداره و کدی که برای node نوشته میشه قرار نیست روی مرورگر اجرا بشه ، بعدش اینم بگم یک زبان جدید هم نیست. برنامه‌های node به زبان جاوا اسکریپت نوشته می شوند . جاوا اسکریپتی که سمت سرور اجرا میشود .

البته از node میشه برای نوشتن برنامه‌های غیر سروری هم استفاده کرد ولی بیشتر کاربردش برای نوشتن برنامه‌های سروری مخصوصا وب سرورهاست. در واقع node خودش وب سرور دارد و از وب سرور فعلی شما (مثلا آپاچی) استفاده نمی کند ، node از طریق خط دستور (command line) اجرا میشود و برنامه شما رو اجرا میکند . حالا برنامه شما میتونه از ماژول وب سرور node استفاده کنه و یک وب سرور راه بندازد .

هدف node ایجاد راهکاری آسان برای نوشتن برنامه‌های مرتبط با شبکه با سرعت، کیفیت و مقیاس پذیری بالاست. پس دلیل اول محبوبیت node رو میشه این جوری نوشت که با node حتی برنامه‌نویس‌های غیرحرفه‌ای هم می‌تونن برنامه‌های حرفه‌ای برای شبکه بنویسند.

اینو به صورت خودمونی نوشتیم حالا شاید باز بعضی از دوستان متوجه این Node.js نشده باشند با یکی از دوستان صحبت کردم و گفتم یه توضیحی دقیق در مورد این Node.js بده دقیق و روان باشد :

Node.js یک پلتفرم کدنویسی سمت سرور است که بر پایه موتور جاوا اسکریپت مرورگر گوگل‌ کروم کدنویسی شده است. این پلتفرم توسط رایان داهل در سال ۲۰۰۹ ایجاد شده است و در حال حاضر آخرین نسخه آن ورژن ۰٫۱۰٫۳۶ می‌باشد.
بر اساس اعلان مستندات رسمی تعریف Node.Js به شکل زیر عنوان می‌شود:
“Node.js یک پلتفرم ایجاد شده بر پایه موتور جاوا اسکریپت گوگل کروم است که باعث سهولت ایجاد و مقیاس‌پذیری برنامه‌های تحت شبکه می‌شود. این پلتفرم از یک مدل I/O رویداد محور استفاده می‌کند که مسدود نشونده (non-blocking) است و همین امر باعث کاهش فشار موجود بر روی سرور و افزایش کارآیی می‌شود و این امر برای اجرای برنامه‌های مبتنی بر داده که بصورت بلادرنگ (Real-Time) بر روی سرورهای نامتمرکز استفاده می‌شوند بسیار مناسب است.”
Node.js یک پلتفرم کد باز برای گسترش برنامه‌های سمت سرور و تحت شبکه می‌باشد. این پلتفرم بر اساس زبان جاوا اسکریپت نوشته شده است و قابلیت پیاده‌سازی بر روی سیستم‌عامل‌های ویندوز، لینوکس و سیستم عامل کامپیوترهای اپل را دارد.

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

آموزش node.js

شاید خیلی از دوستان در مورد پلتفرم چیزی ندونند ابتدا پلتفرم رو توضیح دهیم .

پلتفرم چیست ؟ (Platform)

پلتفرم در واقع بستری است که برنامه های نرم افزاری نوشته شده برای یک وسیله در آن قابل اجرا و استفاده است، این بستر هم شامل ملزومات سخت افزاری (مانند نوع سیستم و CPU) و هم شامل ملزومات نرم افزاری (مانند سیستم عامل) است. 
به طور مثال برنامه های کاربردی و بازی هایی که همه روزه با آنها سر و کار داریم بدون وجود دستگاه هایی مانند کامپیوترهای شخصی (PC)، تلفن های همراه، لپ تاپ ها، کنسول های بازی و… عملا قابل استفاده نیستند (سخت افزار) و از طرفی هر برنامه ای در یک سیستم عامل خاص (و یا حتی تحت نسخه خاص) قابل اجرا است (نرم افزار) که در مجموع به آنها پلتفرم می گوییم.
مانند پلتفرم ویندوز xp 64 bit، پلتفرم ویندوز ۸، پلتفرم ویندوز موبایل، پلتفرم لینوکس، پلتفرم آندروید، پلتفرم جاوا، پلتفرم PC، پلتفرم XBOX و…، یا در حوزه وب در حال حاضر برنامه های نوشته شده به زبان ASP.NET نیاز به سرور با سیستم عامل به فرض ویندوز ۲۰۰۸ دارند (پلتفرم ویندوز سرور ۲۰۰۸)، با دقت در عبارت متوجه می شویم که یک پلتفرم در واقع معرف ملزومات سخت افزاری (سرور) و همچنین ملزومات نرم افزاری (سیستم عامل ویندوز سرور ۲۰۰۸) مورد نیاز برای اجرای یک برنامه کاربردی (ASP.NET) است.
همچنین ممکن است به نسخه ویژه یک نرم افزار نیز اشاره شده باشد (نسخه ۲۰۰۸)، یا در مورد PHP می توان به پلتفرم لینوکس سرور یا ویندوز سرور اشاره کرد که در واقع به معنی سروری است که روی آن سیستم عامل لینوکس یا ویندوز نصب و فعال باشد و لذا به طور خلاصه می گوییم PHP با پلتفرم لینوکس سرور یا ویندوز سرور قابل اجرا و سازگار است.

پلتفرم (Platform) چیست ؟

البته یک کلمه دیگر هم هست به اسم فریم ورک که با این پلت فرم اشتباه گرفته نشود در مورد فریم ورک هم یه توضیحی دهیم که در این مقاله این موضوعات کامل توضیح داده شود .

فریم ورک چیست ؟ (Framework)

فریم ورک (نرم افزاری) در واقع مجموعه منسجم از کلاس ها و توابع (کتابخانه کلاس ها و توابع) از پیش تعریف شده است که قابلیت های بالقوه گوناگون از یک زبان برنامه نویسی را در خود دارد و بدین ترتیب کاربر نهایی را قادر می سازد که از امکانات یک زبان استفاده کند بدون اینکه درگیر مسائل پیچیده و وقت گیر آن شود.
لذا همان طور که یک کلاس یا تابع با هدف جلوگیری از تکرار مکررات و افزایش سرعت کار، تعریف می شود، فریم ورک از این هم فراتر رفته و علاوه بر افزایش سرعت، مواردی مثل توسعه پذیری و ساده سازی را هم مد نظر دارد، به طور مثال همان طور که می دانیم در وب زبانی داریم به نام جاوا اسکریپت که به خودی خود توانایی های زیادی در زمینه اسکریپت نویسی تحت وب در اختیارمان قرار می دهد.
اما در کنار این توانایی ها محدودیت هایی نیز وجود دارد، به طور مثال همه مرورگرها تمام دستورات جاوا اسکریپت را به یک شکل تفسیر نمی کنند و در برخی موارد هر یک ساز خود را می نوازند، از طرفی مسلما تمام کاربران، برنامه نویس حرفه ای نیستند که با موارد پیچیده سر و کار داشته باشند و به راحتی نیازهایشان را پوشش دهند، اینجا است که فریم ورک هایی مانند جی کئوری (jQuery) وارد عمل می شوند.
در فریم ورکی مانند جی کئوری از قبل کلاس ها و توابعی تعریف شده که با مرورگرهای متفاوت سازگارند و با چند خط دستور ساده نیازهای گوناگونی را پوشش می دهند، کافی است فریم ورک را در صفحه خود وارد کنید تا به قابلیت هایش دسترسی داشته باشید، لذا ملاحظه می کنید که جی کئوری چیزی مجزا از جاوا اسکریپت نیست، بلکه مجموعه ای از دستورات آماده آن است که در موقعیت ها و برای مقاصد مختلف، به آسانی و بدون نوشتن کدهای اصلی قابل استفاده است، البته باید مد نظر داشت که استفاده یا عدم استفاده از فریم ورک می تواند بسته به موقعیت و نیاز، امری صحیح و ضروری یا در عین حال زائد و اشتباه تلقی شود، مخصوصا این امر در وب نمود بارزتری دارد، چرا که سرعت و سبکی از ارکان کلیدی در موفقیت سایت های وب هستند و فریم ورک ها معمولا به این مقوله آسیب می زنند.

فریم ورک چیست ؟

ویژگی‌های Node.JS :

در زیر برخی از مهم‌ترین ویژگی‌های این پلتفرم که باعث می‌شود انتخاب اول برنامه‌نویس‌ها باشد ذکر شده است:

غیرهمزمانی و رویداد محوری : همه‌ی API های کتابخانه Node.js غیرهمزمان می‌باشند که همین امر باعث مسدودناپذیری(non-blocking) آن می‌شود. این بدان معناست که که Node.js در بستر سرور هیچگاه در انتظار بازگشت اطلاعات از APIنمی‌ماند. سرور پس از صدا زدن یک API به سمت API بعدی حرکت می‌کند و برای اطلاع از وضعیت API قبلی از مکانیزم ثبت رویداد استفاده می‌کند.

سرعت بالا : با توجه به این که نود جی اس بر پایه نسخه ۸ موتور جاوا اسکریپت گوگل کروم پیاده‌سازی شده است در اجرای کدها بسیار سریع عمل می‌کند.

تک موضوع اما بسیار مقیاس‌ پدیر : نود جی اس از یک مدل تک موضوعی به همراه حلقه رویددادها استفاده می‌کند. مکانیزم رویداد باعث می‌شود که سرور به صورت مسدود نشونده پاسخ‌ها را ارسال کند و همین امر باعث می‌شود بر خلاف مکانیزم‌های سنتی که سرور را محدود به چند درخواست برای پردازش درخواست‌ها می‌کرد سرور بسیار مقیایس‌پذیر شود.

نود جی اس از یک برنامه تک موضوعی استفاده می‌کند و همان برنامه می‌تواند سرویسی برای تعداد بسیار بیشتری از درخواست ها نسبت به مکانیزم های قدیمی سرور مثل HTTP سرور آپاچی فراهم کند.

عدم وجود بافرینگ : این پلتفرم هیچ داده‌ای را بافر نمی‌کند و داده‌های خروجی را به صورت تکه‌تکه منتشر می‌کند.

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

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

در زیر لینکی مربوط به گیت‌هاب وجود دارد که لیستی جامع از پروژه ها، نرم‌افزارها و شرکت‌هایی که از Node.js استفاده می‌کنند را مشخص کرده است. از جمله مهمترین اعضای این لیست می‌توان eBay, General Electric, GoDaddy, Microsoft, PayPal, Uber, Wikipins, Yahoo! و را نام برد.

لیست پروژه ها ، نرم افزارها و شرکت های استفاده کننده از Node.js 

نمودار زیر مهم‌ترین بخش‌های Node.js را به تصویر کشیده است:

مهم‌ترین بخش‌های Node.js

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

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

  • نرم‌افزارهای محدوده I/O (ورودی و خروجی)
  • نرم‌افزارهای جریان داده‌ای (Data Streaing)
  • داده‌های نرم‌افزارهای بلادرنگ (Real-Time)
  • برنامه‌های مبتنی بر JASON API
  • برنامه‌های تک صفحه‌ای

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

  • استفاده از این پلتفرم در برنامه‌های متمرکز بر CPU توصیه نمی‌شود.

node-js چیست

برنامه نویسی غیرهم زمان( Asynchronous Programming) :

Node.js از معماری ماژول محور برای تولید اپلیکیشن های پیچیده استفاده می‌کند. هر عملکرد و تابعی در Node.js غیر همزمان است. در I/O ناهمگام، هیچ پروسه‌ای منتظر به پایان رسیدن پروسه‌های دیگر نمی‌ماند. بنابراین هر thread که در روند فعلی برنامه متوقف شود، در پس زمینه‌ی آن اجرا خواهد شد. این مهمترین ویژگی است که باید در مورد node.js  بدانید.
 به عنوان مثال زمانی که می‌خواهید فایلی را از میان فایل‌های سیستمی بخوانید،  باید یک تابع callback مشخص کنید که وقتی عمل خواندن به اتمام رسید، اجرا شود.

در Node.js انجام هر کاری به عهده شماست!

Node.js تنها یک محیط است و شما موظف هستید تمامی موارد را خودتان ذکر کنید.  همین موضوع باعث می‌شود تا کار با این محیط برای کاربران جدید دشوار و خسته کننده به نظر برسد. در ادامه  کدهای Node.js برای یک برنامه‌ی بسیار ساده را می‌بینید:

و معادل آن در PHP:

جدول زیر این دو زبان را  از نظر زمان پاسخ‌دهی مقایسه می‌کند:

معرفی Node.js

در تکرارهای پایین، PHP سریع‌تر عمل می‌کند اما با تکرارهای بالا به این نتیجه می‌رسیم که PHP 93% کندتر از Node.js است.

ماژول‌ها :

Node.js از معماری ماژول برای ساخت برنامه‌ها استفاده می‌کند. ماژول‌ها همانند کتابخانه‌ها در زبان C و واحدها در زبان پاسکال هستند. هر ماژول شامل مجموعه ای از توابع مربوط به موضوع اصلی ماژول است.  به عنوان مثال ماژول http شامل توابع خاصی برای HTTP است. به منظور تسهیل دسترسی به فایل‌های سیستمی، ایجاد سرورهای HTTP و TCP/UDP و اجرای سایر توابع مفید، تعدادی ماژول‌ اصلی در node.js فراهم شده است.
با نوشتن تابع require() ماژول مورد نظر خود را فراخوانی می‌کنیم.
 مانند مثال زیر:

در کد بالا تابع  require() یک مرجع از ماژول http را در یک متغیرhttp  ذخیره می‌کند. با پاس دادن نام ماژول به تابع require() باعث می‌شود Node درون پوشه‌ی node_modules برنامه ما را جست‌وجو کند تا آن را پیدا کند. در صورتی که ماژول مورد نظر پیدا نشد، node  حافظه ماژول‌های سراسری را جستجو می‌کند.
می‌توانید یک فایل واقعی را با کمک  کد زیر مشخص کنید:

ماژول‌ها تکه کدهای محصور شده هستد. اغلب کد درون یک ماژول خصوصی است به این معنی که توابع و متغیرهای درون آن تنها از داخل ماژول قابل دسترسی هستند. ماژول زیر را به عنوان مثال بررسی می‌کنیم:

توسط این کد یک متغیر pi ایجاد می‌کنیم که فقط داخل همین ماژول دیده می‌شود و خارج از ماژول غیرقابل دسترسی است. در صورتیکه دو تابع موجود کنار شیء exports از خارج ماژول هم قابل دسترسی هستند. در واقع می‌توان گفت pi کاملا محافظت شده است.

نصب node.js :

به منظور نصب node.js روی سیستم عامل Windows یا MacOS به سایت nodejs.org مراجعه کنید و در صورتی که از سیستم عامل لینوکس استفاده می‌‌کنید با وارد کردن کد زیر در ترمینال این برنامه را نصب کنید:

یا:

به دلیل وجود Node.js در منابع sid، ممکن است لازم باشد که آن‌ها را به لیست منابع‌تان اضافه کنید:

اما مراقب نصب بسته‌های sid در سیستم‌های قدیمی‌تر باشید. زیرا ممکن است به سیستم صدمه بزند. برای جلوگیری از این امر بعد از اتمام نصب node فایل /etc/apt/sources.list.d/sid.list را پاک کنید.

نصب ماژول‌های جدید :

Node.js دارای یک سیستم مدیریت بسته به نام Node Package Manager (NPM) است که به طور خودکار همراه با node.js نصب می‌شود. NPM  برای نصب ماژول‌های جدید مورد استفاده قرار می‌گیرد. برای نصب یک ماژول ابتدا باید در قسمت command line  به پوشه مورد نظر خود رفته و دستور زیر را اجرا کنید:

ایجاد برنامه‌ی معروف the hello world :

در اولین برنامه‌ی node.js  ای که می‌نویسیم،  پیغام ‘Hello World!’ برای کنسول نمایش داده می‌شود. برای ظاهر شدن این پیغام ابتدا باید یک فایل به نام hello.js ایجاد کرده و کد زیر را وارد نمایید:

حال نوبت به اجرای صفحه می‌رسد. ترمینال را باز می‌کنیم در قسمت command line به پوشه‌ای که hello.js  در آن قرار دارد می‌رویم و دستور زیر را اجرا می‌کنیم:

حالا می‌توانید پیغام ‘Hello World!’ را مشاهده کنید.

سرور HTTP :

می‌خواهیم شما را با برنامه‌ای پیشرفته‌تر آشنا کنیم. در مرحله اول با کدهای زیر شروع می‌کنیم. ابتدا توضیح کنار هر کد و سپس توضیح کلی را بخوانید:

با استفاده از تابع response.write() می‌توانید اطلاعات بیشتری به کاربر بفرستید. البته باید این تابع را قبل از تابع response.end() فراخوانی کنید. این کد را به عنوان http.js ذخیره کرده و آن را در کنسول وارد کنید:

با رفتن به آدرس http://localhost:8080 می‌توانید متن “Hello HTTP!” را در صفحه مشاهده کنید.

به کار بردن پارامترهای URL :

همانطور که قبلا ذکر شد در Node انجام هرکاری به عهده شماست.
کد زیر رادنبال کنید:

در کد داده شده تابع parse() از ماژول url، درخواست‌های URL را به یک شیء تبدیل می‌کند. url یکی از ماژول های اصلی node  است.

خواندن و نوشتن فایل‌ها :

برای مدیریت فایل‌ها در node، از ماژول fs که یکی از ماژول‌های اصلی  node است استفاده می‌کنیم. با استفاده از توابع fs.readFile() و fs.writeFile() قادر به خواندن و نوشتن فایل‌ها خواهیم بود.
در ادامه مثالی از این توابع را مشاهده می‌کنید:

هربار که سرور یک درخواست دریافت می‌کند، اسکریپت یک شماره از فایل را می‌خواند،  سپس شماره‌ را یکی افزایش داده و در فایل می‌نویسد. تابع fs.readFile() سه آرگومان نام فایل، کدگذاری مورد انتظار و تابع   callback  را پذیراست. تابع fs.writeFile() نیز نام فایل و اطلاعات را به عنوان آرگومان می‌پذیرد.

دسترسی به پایگاه‌های داده MySQL :

بیشتر تکنولوژی‌های سمت سرور قبلی دارای ابزار ارتباطی و پایگاه داده‌ی داخلی برای خود هستند. اما برای داشتن پایگاه داده در node.js  باید کتابخانه مربوطه را نصب کنید. کنسول خود را باز کنید و به جایی که صفحات را ذخیره کرده‌اید بروید و دستور زیر را اجرا کنید:

با زدن این دستور ماژول مورد نظر دانلود و نصب می‌شود. مثال زیر کاربرد این دستور را نشان می‌دهد:

در این کد با وارد کردن رشته query و تابع callback، به راحتی می‌توانید از پایگاه داده پرس و جو کنید. در یک برنامه واقعی  ابتدا باید وجود پیغام‌های خطا را چک کنید.  سپس  پاسخ‌های مناسب را  بسته به مثبت یا منفی بودن جواب کوئری ارسال کنید. پارامتر rows دربردارنده نتیجه کوئری است.  با استفاده از تابع JSON.stringify()  می‌توانید اطلاعات  موجود در rows را به فرمت  JSON تبدیل کنید.
این فایل را به عنوان mysql.js ذخیره کرده و اجرا نمایید.  در آدرس http://localhost:8080 فایل‌ها با فرمت   JSON برایتان نمایش داده خواهد شد.

 در این مقاله سعی کردیم توضیحات کاملی در مورد Node.js ارائه دهیم چند تعریف مختلف رو برای این پلتفرم بیان کردیم که شما بیشتر آشنا شوید بعد توضیحات مختصری در مورد شروع کار با Node.js ارائه دادیم . 

نظر شما در مورد پلتفرم Node.js چیه ؟

دیدگاه کاربران

تعداد دیدگاه های کاربران : ۴ دیدگاه

محمد

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

پاسخ دهید
۱

الهام

خیلی خوب بود
لطفا ادامه دهید

پاسخ دهید
۱


Top