آموزش نود جی اس

آنچه در این صفحه می خوانید :

معرفی نود جی اس (Node.js)

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

گرچه js. فایل فرمت استاندارد برای کد JavaScript است، اما نام "Node.js" در این زمینه به فایل خاصی اشاره نمی کند و صرفاً نام محصول است. Node.js دارای معماری مبتنی بر رویداد است که توانایی ورودی/خروجی ناهمگام یا غیر همزمان را دارد. آپشن های طراحی با هدف بهینه سازی توان و مقیاس پذیری در برنامه های وب با عملیات ورودی/خروجی و همچنین برای برنامه های وب در Real-time (به عنوان مثال، برنامه های ارتباطی در Real-time و بازی های مرورگر) انجام می شود. پروژه توسعه توزیع شده Node.js که بنیاد Node.js آن را اداره می کند، توسط برنامه پروژه های همکاری بنیاد لینوکس تسهیل می شود.

فایل Node.js

  • فایل های نود جی اس شامل task هایی هستند که در برخی از موارد خاص اجرا می شوند.
  • یک رویداد معمولی سعی در دسترسی به پورت روی سرور دارد.
  • فایل های Node.js باید قبل از هرگونه نتیجه ای، روی سرور آغاز شوند.
  • فایل های Node.js دارای پسوند "js." هستند.

جاوااسکریپت چیست؟

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

تاریخچه نود جی اس (Node.js)

نود جی اس در ابتدا توسط Ryan Dahl در سال 2009 نوشته شد. نسخه اولیه تنها از لینوکس و مک (Mac OS) پشتیبانی می کرد. توسعه و نگهداری آن توسط Dahl هدایت شد و بعداً توسط Joyent حمایت شد. Dahl این پروژه را در افتتاحیه JSConf اروپا در تاریخ 8 نوامبر 2009 نشان داد. Node.js موتور Google's V8 جاوااسکریپت، یک حلقه رویداد و یک API سطح پایین I / O را ترکیب کرد. در ژانویه 2010، یک مدیر پکیج برای محیط Node.js به نام ان پی ام (npm) معرفی شد.

مدیر پکیج امکان انتشار و به اشتراک گذاری کد منبع کتابخانه های Node.js را برای برنامه نویسان آسانتر می کند و به منظور ساده سازی نصب، به روز رسانی و حذف کتابخانه ها طراحی شده است. در ژوئن 2011، مایکروسافت و Joyent نسخه ویندوز Node.js را اجرا کردند. اولین ساخت Node.js با پشتیبانی از ویندوز در ژوئیه 2011 منتشر شد.

تفاوت نود جی اس (Node.js) با سایر زبان ها و پلتفرم های سمت سرور چیست؟

به طور کلی ویژگی های نود جی اس به صورت زیر است:

  • غیرهمزمانی و مبتنی بر رویداد

تمام API های کتابخانه Node.js غیرهمزمان هستند. اساسا به این معنی است که یک سرور مبتنی بر Node.js هرگز منتظر API برای بازگشت داده ها نیست. سرور بعد از فراخوانی آن به API بعد حرکت می کند و مکانیزم اعلان رویدادهای Node.js به سرور کمک می کند تا از فراخوانی API پیشین پاسخی دریافت کند.

  • تک نخی یا Single Thread اما بسیار مقیاس پذیر

ویژگی های نود جی اس

Node.js از یک مدل Threaded با حلقه رویداد استفاده می کند. مکانیزم رویداد به سرور کمک می کند که به یک روش غیر مسدود کننده پاسخ دهد و سرور را بسیار مقیاس پذیر می کند، به نحوی که در مقایسه با سرورهای سنتی که threads محدودی را برای رسیدگی به درخواست ایجاد می کنند، Node.js از یک برنامه تک threaded استفاده می کند و همان برنامه می تواند برای سرویس تعداد زیادی درخواست فراهم کند که از سرویس های سنتی مثل Apache HTTP Server بیشتر می باشد.

  • عدم بافرینگ

اپلیکیشن های Node.js هرگز داده ای را بافر نمی کنند. این برنامه ها به سادگی داده ها را درون chunks قرار می دهند. Node.js یک محیط ران تایم جاوااسکریپت است که درخواست های ورودی را در یک حلقه به نام حلقه رویداد پردازش می کند.

ویژگی های نود جی اس (Node.js)

از ویژکی های فنی به موارد زیر می توان اشاره کرد:

  • Threading

Node.js با استفاده از فراخوانی های I / O بدون انسداد، با استفاده از یک فراخوانی بدون وقفه فعالیت می کند و به آن اجازه می دهد تا ده ها هزار اتصال همزمان را پشتیبانی کند بدون اینکه هزینه سوئیچ Thread زمینه را تحمل کند. طراحی به اشتراک گذاری یک موضوع واحد در بین تمام درخواست هایی که از الگوی مشاهده کننده استفاده می کنند، برای ساخت برنامه های کاملاً همزمان در نظر گرفته شده است، در حالی که هر تابعی که عملیات I / O را انجام دهد باید از یک فراخوانی برگشتی استفاده کند. برای قرار دادن حلقه رویداد تک رشته ای، Node.js از کتابخانه libuv استفاده می کند، که به نوبه خود، از یک مخزن با سایز ثابت استفاده می کند که برخی از عملیات I / O غیر همزمان را غیر مسدود می کند.

یک مخزن Thread، اجرای وظایف موازی در Node.js را انجام می دهد. تابع اصلی فراخوانی وظایف را به صف وظیفه اشتراکی ارسال می کند، که Thread ها را در مخزن Thread کشیده و اجرا می شوند. ذاتاً تابع های غیر مسدود کننده سیستم شبکه را به پریزهای غیر مسدود کننده هسته تبدیل می کنند، در حالی که ذاتاً تابع های سیستم مانند فایل I / O را مسدود می کنند و در Thread هایشان عمل می کنند. هنگامی که Thread یک کار را انجام می دهد، Thread اصلی این Thread را مطلع می کند، که به نوبه خود، پاسخ به فراخوانی ثبت شده را پاسخ دهد.

نکته منفی این رویکرد این است که Node.js با افزایش تعداد هسته های CPU دستگاه میزبان بدون استفاده از یک ماژول اضافی مانند کلاستر، StrongLoop Manager Manager یا pm2 اجازه مقیاس گذاری عمودی را نمی دهد. با این حال، توسعه دهندگان می توانند تعداد پیش فرض موضوعات را در مخزن Thread libuv افزایش دهند. سیستم عامل سرور (OS) احتمالاً این موضوعات را در چند هسته توزیع می کند. مشکل دیگر این است که محاسبات طولانی مدت و سایر وظایف محدود شده با CPU، کل حلقه رویداد را تا اتمام کار مسدود می کنند.

Node.js از libuv برای اداره حوادث ناهمزمان استفاده می کند. Libuv یک لایه انتزاع برای عملکرد سیستم شبکه و فایل در هر دو سیستم ویندوز و مبتنی بر POSIX مانند Linux، macOS، OSS در NonStop و یونیکس است. عملکرد اصلی Node.js در یک کتابخانه جاوااسکریپت قرار دارد. بایندینگ Node.js که به زبان سی پلاس پلاس نوشته شده است، این فناوری ها را به یکدیگر و به سیستم عامل وصل می کند.

  • V8

V8 موتور اجرای JavaScript است که در ابتدا برای Google Chrome ساخته شده است. سپس در سال 2008 توسط گوگل باز شد. با نوشتن در C++، V8 کد منبع جاوااسکریپت را در ران تایم (JIT) به جای تفسیر قبل از زمان (AOT) کامپایل می کند.

  • مدیریت پکیج NPM

ان پی ام (npm) مدیر پکیج از پیش نصب شده برای پلتفرم سرور Node.js است. این برنامه Node.js را از رجیستری npm نصب می کند، نصب و مدیریت برنامه های شخص ثالث Node.js را سازماندهی می کند. پکیج های موجود در رجیستری npm می توانند از کتابخانه های کمکی ساده مانند Lodash گرفته تا تسک رانر هایی مانند گرانت (Grunt) متغیر باشند.

  • API یکپارچه

Node.js را می توان با یک مرورگر، یک پایگاه داده که از داده های JSON پشتیبانی می کند (مانند پستگرس‌کیوال (PostgreSQL)، مانگو دی بی (MongoDB) یا CouchDB) و JSON در پشته توسعه JavaScript یکپارچه استفاده کرد. با تطبیق آنچه که در اصل الگوهای توسعه سمت سرور مانند MVC، MVP، MVVM و غیره وجود دارد، Node.js امکان استفاده مجدد از همان مدل و رابط سرویس را بین سمت کلاینت و سمت سرور فراهم می کند.

  • حلقه رویداد (Event loop)

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

نود جی اس امکان ایجاد سرورهای وب و ابزارهای شبکه را با استفاده از JavaScript و مجموعه ای از "ماژول ها" فراهم می کند که عملکردهای مختلف هسته را کنترل می کنند. ماژول ها برای سیستم فایل I / O، شبکه سازی ( DNS، HTTP، TCP، TLS / SSL یا UDP )، داده های باینری (بافر)، توابع رمزنگاری، جریان داده ها و سایر عملکردهای اصلی ارائه شده اند. ماژول های Node.js از API که برای کاهش پیچیدگی نوشتن برنامه های سرور طراحی شده استفاده می کنند.

اگرچه سیستم ماژول مبتنی بر الگوی ماژول های رایج است، اما معرفی جدید ماژول ها در مشخصات ECMAScript باعث شده است که مدل استفاده از ماژول های ECMAScript در Node.js به طور پیش فرض تغییر جهت دهد. نود جی اس به طور رسمی در لینوکس، macOS و مایکروسافت ویندوز 7 و سرور 2008 (و بعد از آن) پشتیبانی می شود. کد منبع ارائه شده همچنین ممکن است بر روی سیستم عامل های مشابه با آنهایی که از طرف اشخاص ثالث پشتیبانی یا ایجادمی شود نیز ساخته شود تا از بقیه مانند سرورهای NonStop و Unix پشتیبانی کند. می توان آن را با کافی‌ اسکریپت (CoffeeScript) (جایگزین جاوااسکریپت)، دارت (Dart) یا تایپ اسکریپت (TypeScript) یا هر زبان دیگری که می تواند به JavaScript کامپایل کند، نوشت.

ساختار نود جی اس (Node.js)

Node.js در طراحی مشابه و تحت تأثیر سیستم هایی مانند Ruby's Event Machine و Python's Twisted است. Node.js مدل رویداد را کمی بیشتر می کند و حلقه رویداد را به عنوان یک ران تایم به جای کتابخانه ارائه می دهد. در سیستم های دیگر، همیشه یک فراخوانی مسدود کننده برای شروع حلقه رویداد وجود دارد. به طور معمول، این رفتار از طریق فراخوانی های برگشتی در ابتدای اسکریپت تعریف می شود و در پایان، سرور از طریق فراخوانی مسدود کننده مانند ()EventMachine::run شروع می شود. در Node.js، چنین فراخوانی start-the-event-loop وجود ندارد. Node.js پس از اجرای اسکریپت ورودی، به سادگی وارد حلقه رویداد می شود. Node.js هنگامی که دیگر فراخوانی برگشتی برای انجام وجود ندارد، از حلقه رویداد خارج می شود. این رفتار مانند مرورگر جاواسکریپت است که حلقه رویداد از کاربر پنهان است.

HTTP یک تابع  first-class در Node.js است، با داشتن استریمینگ و با تأخیر کم طراحی شده است. این باعث می شود Node.js برای ایجاد کتابخانه وب یا فریمورک مناسب باشد. مفهوم اینکه Node.js بدون thread طراحی می شود به این معنی نیست که نمی توانید از هسته های چندگانه در محیط خود استفاده کنید. پروسس های Child را می توان با استفاده از ()child_process.fork ایجاد کرد و به گونه ای طراحی شده اند که بتواند با آنها ارتباط برقرار کند. ماژول cluster که بر روی همان اینترفیس ساخته شده است، که به شما امکان می دهد تا سوکت ها را بین پردازش ها به اشتراک بگذارید تا تعادل بار بر روی هسته های شما فعال شود.

نود جی اس (Node.js) محیط بک اند است یا فرانت اند؟

Node.js در واقع یک محیط ران تایم بر اساس موتور V8 Javascript برای Chrome است، به این معنی که می تواند Javascript را از متن اجرای یک مرورگر خارج کند. برای ترسیم یک قیاس بسیار مبهم Node.js به جاوااسکریپت همان چیزی است که JRE به جاوا است، (اما مقایسه خیلی مناسبی نیست)

این بستگی به شما دارد که چگونه می خواهید Node.js. را بکار بگیرید. از آنجا که می تواند جاوااسکریپت را خارج از یک مرورگر اجرا کند و همچنین توانایی اجرای یک سرور HTTP مبتنی بر I / O غیر مسدود کننده (با کمک کتابخانه های HTTP) را دارد، می توانید از آن در سناریوهای بک اند / سرور استفاده کنید.

همچنین، می توانید از Node.js در قسمت فرانت اند استفاده کنید تا بتوانید کارهای روزانه خود را مانند بیلد، اجرای تست واحد کد فرانت اند خود به صورت خودکار انجام دهید. ابزاری مانند Grunt، Gulp، Bower قابلیت اهرم Node.js را برای بهبود و تقویت توسعه نرم افزار شما فراهم می آورند. همچنین در حال حاضر انگولار نیز از Node.js برای نصب پکیج ها و تدوین Typescript به Javascript استفاده می کند.

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

کاربردهای نود جی اس (Node.js)

در درجه اول برای ساختن برنامه های شبکه در وب سرورها استفاده می شود. مهمترین تفاوت بین Node.js و پی اچ پی (PHP) در این است که اکثر توابع در بلوک PHP، فقط بعد از اتمام دستورات قبلی اجرا می شوند، در حالی که توابع Node.js غیر مسدود کننده هستند (دستورات به طور همزمان یا حتی به صورت موازی اجرا می شوند) و از علامت های برگشتی برای تکمیل یا خرابی سیگنال استفاده می کنند.

نود جی اس برنامه نویسی event-driven را برای سرورهای وب به ارمغان می آورد و امکان توسعه سرورهای سریع وب در JavaScript را فراهم می سازد. توسعه دهندگان می توانند با استفاده از یک مدل ساده برنامه نویسی مبتنی بر رویداد که از لینک های برگشتی استفاده می کند، بدون استفاده از Thread، سرورهای مقیاس پذیر ایجاد کنند. Node.js سهولت یک زبان برنامه نویسی (JavaScript) را با قدرت برنامه نویسی شبکه یونیکس فراهم می کند. نود جی اس از وقتی که به صورت اوپن سورس تحت مجوز BSD قرار گرفت، روی موتور Java V8 GoogleS ساخته شد. با اصول اینترنت مانند HTTP، DNS، TCP تطابق دارد. جاوااسکریپت همچنین یک زبان شناخته شده بود که Node.js را در دسترس جامعه توسعه وب قرار داد.

جامعه اوپن سورس برای سرعت بخشیدن به پیشرفت برنامه ها، فریمورک های وب را ایجاد کرده است. چنین فریمورک هایی شامل Connect، اکسپرس جی اس (Express.js)، Socket.IO،Feathers.js،کوا جی اس (Koa.js)،سالیس جی اس (Sails.js)،Hapi.js، میتیور (Meteor)، Derby و بسیاری دیگر است. پکیج های متنوعی نیز برای ایجاد ارتباط با سایر زبان ها یا محیط های اجرا مانند دات نت (NET.) ایجاد شده است.

IDE های مدرن دسکتاپ ویژگی های ویرایش و اشکال زدایی را به طور خاص برای برنامه های Node.js ارائه می دهند. IDE هایی شامل Atom، Brackets، JetBrains، وب استرم (WebStorm)،ویژوال استودیو (Visual Studio) (با ابزارهای Node.js برای ویژوال استودیو یا TypeScript با تعریف (Node،NetBeans،Nodeclipse Enide Studio و ویژوال استودیو کد (Visual Studio Code). برخی از IDE های مبتنی بر وب آنلاین همچنین از Node.js پشتیبانی می کنند، مانندCodeanywhere،Codenvy،Cloud9 IDE، Koding و ویرایشگر جریان تصویری در Node-RED.

  • نود جی اس می تواند صفحه با محتوای پویا ایجاد کند.
  • نود جی اس می تواند فایل ها را روی سرور create، open، read، write، delete و close کند.
  • نود جی اس می تواند داده های فرم را جمع آوری کند.
  • نود جی اس می تواند داده ها را در پایگاه داده اضافه، حذف و اصلاح کند.

از Nodejs در موارد زیر استفاده می شود:

نود جی اس (Node.js) و اکما اسکریپت (ECMAScript)

اکما اسکریپت (ECMAScript) زبان اسکریپت نویسی است که توسط ECMAScript International استاندارد شده است.ECMAScript معمولاً برای اسکریپت نویسی سمت کلاینت در وب استفاده می شود و به طور فزاینده ای برای نوشتن برنامه ها و سرویس های سرور با استفاده از نود جی اس مورد استفاده قرار می گیرد. ECMAScript تحت تاثیر زبان های برنامه نویسی مانند پرل، پایتون،جاوا، JavaScript، Jscript و ActionScript است. ECMAScript 6، همچنین به عنوان ECMAScript 2015 شناخته می شود.

ECMAScript برای استانداردسازی جاوااسکریپت جهت کمک به تقویت پیاده سازی مستقل ایجاد شده است. جاوااسکریپت از زمان انتشار اولین استاندارد، با کاربردهای دیگر از جمله JScript و ActionScript، بیشترین کاربرد را در ECMAScript داشته است.

Node.js برای نسخه های مدرن V8 ساخته شده است. با به روز بودن جدیدترین نسخه های این موتور، اطمینان حاصل می کنیم ویژگی های جدید JavaScript ECMA-262 را به موقع توسعه دهندگان Node.js دریافت می کنند.

کلیه ویژگی های ECMAScript 2015 (ES6) به سه گروه shipping، staged و in-progress تقسیم می شوند:

  • تمام ویژگی های shipping، که V8 را پایدار می داند، به طور پیش فرض در Node.js روشن می شوند و نیازی به هیچ نوع پرچم ران تایم ندارند.
  • ویژگی های Staged، که تقریباً ویژگی های کاملی دارند که توسط تیم V8 پایدار تلقی نمی شوند، به پرچم زمان اجرا نیاز دارند: harmony--
  • ویژگی های in-progress، می توانند به صورت جداگانه توسط پرچم harmony مربوطه فعال شوند.

مقایسه جنگو (Django) و نود جی اس (Node.js)

مقایسه جنگو و نود جی اس

Node JS و جنگو (Django) هر دو فناوری های بسیار قدرتمندی برای ساخت برنامه های همه منظوره وب و برنامه های موبایل با رابط کاربری عالی هستند. هر دو اوپن سورس است و بدون نیاز به مجوز و به صورت رایگان هستند. آنها در تعدادی از پروژه های بزرگ استفاده می شوند و دارای یک جامعه وب گسترده هستند.

Node JS مبتنی بر JavaScript است و در سمت کلاینت برنامه های وب استفاده می شود. از طرف دیگر، در فریمورک جنگو برنامه های با زبان پایتون کار می کند تا به توسعه دهندگان وب کمک کند تا برنامه ها را در زمان واقعی و سریعتر بسازند.

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

نحوه نصب نود جی اس (Node.js)

  • نصب در ابونتو (Ubuntu)

دستور زیر را با نصب Node on و Ubuntu با استفاده از apt-get اجرا کنید. این کار NPM را با node.js نیز نصب می کند. این دستور همچنین بسیاری از پکیج های وابسته دیگر را روی سیستم شما نصب می کند.

sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm

بعد از نصب node.js نسخه نصب شده را تأیید و بررسی کنید.

node -v 
npm -v 

MacOS Installer را مستقیماً از وب سایت nodejs.org دانلود کنید.

اگر می خواهید پکیج را با bash بارگیری کنید:

curl "https://nodejs.org/dist/latest/node-${VERSION:-$(wget -qO- https://nodejs.org/dist/latest/ | sed -nE 's|.*>node-(.*)\.pkg</a>.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"

  • روش های جایگزین

استفاده از Homebrew:

brew install node

استفاده از MacPorts:

port install nodejs<major version>

# Example port install nodejs7

با استفاده از pkgsrc پکیج باینری را نصب کنید:

pkgin -y install nodejs

یا به صورت دستی از pkgsrc ایجاد کنید:

cd pkgsrc/lang/nodejs && bmake install


مثال نود جی اس (Node.js)

به عنوان یک اجرا کننده رویدادهای ناهماهنگ در جاوااسکریپت، Node.js به شکلی طراحی شده است که بتوان با آن برنامه‌های تحت وب توسعه پذیر ساخت. در مثال "hello world" پایین، تعداد خیلی زیادی اتصال به صورت هم زمان انجام می گیرد. پس از هر اتصال یک فراخوان (callback) اجرا خواهد شد، اما اگر کاری برای انجام نباشد نود متوقف می شود.

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'); });

server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });

نظرتون درباره این نوشته چیه؟ عالیه بد نیست خوب نبود