آنچه در این مقاله میخوانید
آموزش مفاهیم مقدماتی Node.js
۱۳ شهریور ۱۳۹۹
هر فناوری، استانداردهای خاص خود را دارد. مهم نیست PHP ،JavaScript ، Java و یا Swift باشد، همیشه قوانینی وجود دارند که باید از آنها پیروی کنید. بهعنوان توسعهدهنده نرمافزار، سعی میکنیم از اختراع دوباره چیزهایی که وجود دارند، خودداری کنیم و برای این کار باید قبل از شروع به نوشتن کدها، از وجود نداشتن کدهای مدنظرمان اطمینان حاصل کنیم.
مدیر پکیج (package) Node.js یا همان NPM، هزاران کتابخانه و ابزار جاوااسکریپتی را بهصورت رایگان در اختیار توسعهدهندگان قرار داده است. امروزه برای نیازهای مختلف مانند فریمورکهای HTTP، کتابخانههای اعتبارسنجی، ابزارهای تست و حتی ثبت لاگ، گزینههای متعددی وجود دارد.
با این حال، دیدهایم که بسیاری از توسعهدهندگان تازهکار در انتخاب ابزار مناسب دچار سردرگمی میشوند. به همین دلیل، تصمیم گرفتیم مجموعهای از مفاهیم پایه و ابزارهای کاربردی را معرفی کنیم تا مسیر انتخاب را برای شما سادهتر کنیم،
بدون هیچگونه پیکربندی پیچیده، هاست NodeJS را در چند ثانیه راهاندازی کنید!
✅ عملکرد بالا ✅ بدون نیاز به پیکربندی ✅ راهاندازی سریع
خرید هاست ابری NodeJS
آنچه در ادامه خواهید خواند:
- مفاهیم مقدماتی Node.js
- سوالات متداول
- جمع بندی

Node.js چیست؟
Node.js
مفاهیم مقدماتی Node.js
در ادامه با تمامی این مفاهیم به صورت جداگانه آشنا خواهید شد.
Supervisor
احتمالا برای شروع باید با این سوال شروع کنیم. Node.js چهکاری انجام میدهد؟ بهتر است بدانید که تفاوتهایی بین یک سرور Node.js و PHP وجود دارند. هرکدام از درخواستهایی که به سرور PHP ارسال میشوند، isolate یا جدا شده شده هستند و به این شکل خطاهای ایجاد شده در هر درخواست، بر روی درخواست دیگر تاثیری ندارد.
اما Node.js متفاوت است، هرخطایی که در آن رخ دهد، بر روی کل سرور تاثیر میگذارد. بدتر از اینها ممکن است با ایجاد خطا، تمام سرور دچار مشکل شود و دیگر سرور پاسخگوی دیگر درخواستها نباشد. به همین دلیل شما به یک supervisor نیاز خواهید داشت، این یک ابزار مخصوص برای نظارت بر روند و در صورت لزوم راهاندازی مجدد برنامه، بهحساب میآید. ابزارهای مختلفی با این کارایی وجود دارند که معروفترین آنها forever و supervisor هستند. همچنین PM2 هم توصیه میشود.
PM2 ابزاری برای ارائه محصول (Production Runtime) و مدیریت پردازشها در برنامههای nodejs است. میتوان گفت این ابزاری است که دقیقا هر توسعهدهندهای به آن احتیاج دارد. PM2 یک قابلیت به نام PM2-Dev دارد و در زمانی استفاده میشود که پروژهمان درحال توسعه است و توسعه را با راهاندازی مجدد برنامه در زمانی که کدهایتان را تغییر میدهید، آسان میکند.
همچنین PM2 دارای یک load balancer داخلی است. از مقیاسبندی پشتیبانی میکند (به شما اجازه میدهد برنامه Node.js خود را در حالت cluster اجرا کنید). بهعلاوه با دستور ساده m2
میتوانید به عملیات استقرار برنامهتان، رسیدگی کرده و همچنین درصورت تمایل به containerize کردن برنامهتان با PM2 میتوانید از docker image های این ابزار استفاده کنید. سرانجام این ابزار یک داشبورد برای کنترل وضعیت برنامه در اختیار شما قرار میدهد که در آن لاگها، خطاها و میزان استفاده از منابع و بسیاری از موارد دیگر، به شما نشان داده میشود.
معرفی هاست رایگان Node.js
هاست رایگان Node.js
فریمورک (Framework)
مورد بعدی که باید در برنامه یادگیری Node.js قرار دهید، انتخاب و یادگیری فریمورک مناسب است. همانطور که همه میدانند، در زبان جاوااسکریپت تعداد زیادی فریمورک وجود دارد و این تعداد در حال رشد هستند. Node.js هم به این صورت است. گزینههای زیادی وجود دارند که انتخاب را دشوار میکنند.
در بین گزینههای متنوعی که برای فریمورکهای Node.js وجود دارد مانند Koa , Loopback , Nest.js , Hapi , Restify Fastify و Sails.js معمولاً Express.js بهعنوان یکی از بهترین و مطمئنترین انتخابها شناخته میشود.
دلایل مختلفی وجود دارد که باعث شده Express.js در بسیاری از پروژهها مورد استفاده قرار بگیرد و نسبت به دیگر فریمورکها اولویت پیدا کند.
مهمترین دلیل این انتخاب، جامعهی کاربری گسترده و فعال Express.js است. این فریمورک آنقدر شناختهشده است که گاهی اوقات برخی افراد، Express.js را با خود Node.js اشتباه میگیرند.
از مزیتها و معایب Express در مقایسه با فریمورکهای دیگر میتوان به موارد زیر اشاره کرد:
- این فریمورک بر خلاف Koa، مبتنی بر Callback است.
- برخلاف فریمورک Restify، از قبل برای REST API پیکربندی نشده است.
- عملکرد فریمورک Express به خوبی Fastify نیست.
اما این فریمورک با افزوده شدن چند افزونه و قابلیتهای جدید Node.js 14، سهولتی باور نکردنی را در اختیار ما قرار میدهد.
در ادامه باید بگوییم که Express بر پایه Middleware ها کار میکند و اگر شما با redux آشنا باشید، میدانید که چقدر کارتان راحت میشود. اگرچه برخلاف فریمورک Hapi، از قابلیت اعتبارسنجی دادهها بهصورت داخلی بهره نبرده است اما شما میتوانید کتابخانههایی مانند express-validator (ajv) , celebrate (joli) را به پروژهتان اضافه کنید و از این قابلیت بهره ببرید.
همچنین برای مدیریت لاگها میتوانید به سادگی کتابخانههای winston , pino یا bunyan را به فریمورک خود اضاف کنید.
برای تکمیل این بخش لیستی از پکیجهای Middleware که معمولا از آنها استفاده میشود را معرفی خواهیم کرد.
- winston: سیستم ثبت Log.
- morgan: برای ثبت لاگ درخواستها.
- cors: رسیدگی به cors.
- helmet: تامین امنیت برنامه.
- celebrate: برای اعتبارسنجی درخواست و رسیدگی به خطا.
البته باید افزود که اینها فقط موارد رایجی هستند که برنامهنویسان تمایل دارند از آنها استفاده کنند.
همین الان، بدون کمترین پیچیدگی، سرور مجازی خودتون رو در کمتر از ۳۰ ثانیه، راهاندازی کنید.
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه بهصرفه
خرید سرور مجازی ابری
تست و ارزیابی برنامه
یکی دیگر از بخشهای اصولی که در Node.js باید به آن بپردازیم، تست است. همه ما برای برنامههایمان تست مینویسیم یا حداقل امیدواریم اینچنین باشد. شما برای انجام این کار به چند ابزار مختلف نیاز خواهید داشت:
- ابزاری برای اجرای تست (به آن test runner میگویند)
- ابزاری دیگر برای اثبات نتایج (assertion library)
- در موارد پیشرفتهتر ابزاری برای mock/stub کردن ماژولها (mocking library)
شاید زمانی که کار با Node.js را شروع میکنید نیاز شود تا تمام مواردی که در بخش بالا دربارهشان صحبت کردهایم را نصب کنید. برای شروع با مواردی مانند mocha , chai , sinon برخورد خواهید کرد اما ابزارهای دیگری وجود دارند، برای مثال میتوان به Jasmine (test runner + assertion library) و Rewire (module mocking library) اشاره کرد.
اما از زمانی که React منتشر شده، همه چیز تغییر کرده است. فیسبوک یک ابزار تست فوقالعاده به نام Jest در اختیار توسعهدهندگان قرار داده است که تمام موارد مورد نیاز را شامل میشود.
معرفی هاست NestJS رایگان
هاست NestJS رایگان
دیباگینگ (Debugging)
بیایید با این موضوع کنار بیاییم که راهی برای رهایی از به وجود آمدن باگ در برنامه، وجود ندارد. شاید این مورد یک آرزو باشد که بخواهید روزی به آن برسید، اما ایجاد یک برنامه موبایل یا وب آنهم به سادگی، غیرممکن است. مهم نیست که چقدر سخت تلاش کنید تا موارد مورد استفاده در برنامه را تست کنید، باز هم با مواردی غیر منتظره در برنامهتان روبرو خواهید شد.
به همین دلیل است که در شروع آموزشهای Node.js باید روش اشکال زدایی یا همان دیباگینگ (Debugging) کدها را یاد بگیرید. یکی از موارد مهم در این زمینه، داشتن ابزارهایی برای پیدا کردن راه حل است.
Node.js تا به امروز، مسیر طولانی را طی کرده، همچنین با تجربههای به وجود آمده دیباگینگ (Debugging) هم آسانتر شده است. در گذشته برای فهمیدن اینکه چه اتفاقی در کدهایمان رخ میدهد از console.log استفاده میشد. سپس node-inspector به میان آمد اما در مقابل ابزارهای موجود در PHP، ناکارآمد بود.
ابزار دیباگینگی به نام NDB وجود دارد که توسط گوگل توسعه داده شده و برای درک اهمیت این موضوع باید اشاره کنیم که گوگل همان کمپانی است که موتور V8 را توسعه داده و امروزه در بسیاری از پلتفرمها از آن استفاده میشود.
به جای اینکه برنامههایتان را با سوئیچ -inspect
(این قابلیت توسط node-inspector به هسته اصلی Node اضاف شده است) اجرا کنید، میتوانید به سادگی از دستور ndb
استفاده کرده برای مثال: ndb npm start
و با اجرای این دستور یک مرورگر جدید با هدف دیباگینگ (Debugging) برنامه باز میشود. تمام فایلهای هسته node به صورت پیشفرض در blacklist قرار میگیرند. همچنین شما به ترمینال، REPL و بسیاری از موارد دیگر دسترسی خواهید داشت.
نحوه نصب Node.js روی سرور مجازی اوبونتو Ubuntu
نحوه نصب Node.js
سبک کدنویسی
برخلاف PHP که از سبک کدنویسی PSR پیروی میکند، زبان جاوااسکریپت به این شکل نیست و بسیاری از کمپانیها قوانین خودشان را بهوجود میآورند.
برای رعایت همه قوانین باید ابزاری داشته باشید که تمام اشتباهات را ردگیری کرده و احتمالا بتواند مشکلها را برطرف کند. شما میتوانید برای اینکار از eslint یا tslint (بسته به زبانی که میخواهید با آن کار کنید) و Prettier استفاده کنید. البته باید به مورد جالبی اشاره داشته باشیم، شما میتوانید تمام این ابزارها را در کنار همدیگر استفاده کنید. هر دو ابزار eslint و tslint ابزارهای linting بهحساب میآیند. به این معنی که آنها مجموعهای از قوانین تعیین شده را در کد شما بررسی میکنند، برای مثال: استفاده از var را مجاز نمیدانند.
زبان برنامهنویسی
در بخش پایانی این مقاله به زبان برنامهنویسی میپردازیم. با اینکه همه ما از جاوااسکریپت استفاده میکنیم، ولی روشهای استفادهمان متفاوت است. برخی مجبورند از ES5 استفاده کنند درحالی که برخی دیگر از برنامهنویسان میتوانند تمام کدهایشان را با ES9 بنویسند یا حتی از stage 3 proposals به کمک babel استفاده کنند. یکی از نکتههای قابل ذکر دیگری که در Node.js وجود دارد، static typing است که روز به روز محبوبتر میشود.
۱۰ ترفند جاوا اسکریپت که فقط توسعهدهندگان حرفهای از آنها خبر دارند!
ترفند جاوا اسکریپت
سوالات متداول
در ادامه به سوالاتی که امکان دارد در این زمینه برای شما بدون پاسخ بماند، جوابهای کوتاه اما مفیدی دادهایم که با استفاده از آن میتوانید به سوال خود پاسخ صحیحی را بدهید.
Node.js چیست و چه کاربردی دارد؟
Node.js یک محیط اجرایی برای جاوااسکریپت است که روی موتور V8 گوگل ساخته شده و امکان اجرای کدهای جاوااسکریپت در سمت سرور را فراهم میکند. از آن در ساخت برنامههای تحت وب، API ها، اپلیکیشنهای Real-time و حتی ابزارهای خط فرمان استفاده میشود.
چرا باید از Express.js برای توسعه برنامه های Node.js استفاده کنم؟
Express.js یک فریمورک سبک و انعطافپذیر برای Node.js است که به شما کمک میکند سریعتر و سادهتر API و اپلیکیشنهای تحت وب بسازید. جامعه کاربری بزرگ، مستندات کامل و پشتیبانی از Middleware ها از مهمترین دلایل محبوبیت آن هستند.
تفاوت بین Node.js و PHP در مدیریت درخواست ها چیست؟
در PHP، هر درخواست بهصورت جداگانه (Isolated) پردازش میشود و خطاهای یک درخواست روی درخواستهای دیگر تأثیری ندارند. اما در Node.js همه درخواستها روی یک نخ (Thread) اجرا میشوند، بنابراین اگر یک خطا مدیریت نشود، میتواند کل برنامه را تحت تأثیر قرار دهد.
چطور برنامه Node.js را در محیط تولید (Production) اجرا کنم؟
برای اجرای حرفهای یک برنامه Node.js در محیط Production میتوان از ابزارهایی مانند PM2 استفاده کرد. این ابزار امکان مدیریت پردازشها، اجرای اپلیکیشن در حالت Cluster، مانیتورینگ، Load Balancing و راهاندازی مجدد خودکار برنامه هنگام خطا را فراهم میکند.
بهترین ابزارهای تست و دیباگ در Node.js کدام ها هستند؟
برای تست میتوانید از Jest استفاده کنید که همه ابزارهای مورد نیاز را در خود دارد. برای دیباگ هم ابزار NDB گزینهای عالی برای اجرای برنامهها با قابلیت بازرسی دقیق کد است.
چه فریم ورک هایی برای Node.js وجود دارد و کدام یک را انتخاب کنم؟
Node.js فریمورکهای متنوعی دارد مانند Express.js , NestJS , Fastify , Koa , Hapi و Loopback. انتخاب فریمورک به نوع پروژه و تجربهی شما بستگی دارد. برای شروع یا پروژههای عمومی، Express.js به دلیل سادگی و پشتیبانی گسترده، بهترین گزینه است.
چطور یک برنامهی Node.js را برای محیط تولید روی سرور مجازی اوبونتو Ubuntu راهاندازی کنیم؟
برنامهی Node.js
جمع بندی
اکوسیستم Node.js بهقدری گسترده است که یک توسعهدهنده جوان نمیتواند فقط به آن وارد شود و بعد از آن بتواند از تمام ویژگیهای موجود، استفاده ببرد. به دلیل اهمیت بالای زمان، بهتر است بهجای امتحان کردن تمام ابزارهای موجود، از توسعهدهندگان باتجربه کمک گرفته و به کمک توصیههای آنها، ابزار مناسب را انتخاب کنید.