یک راهنمای NODE.JS برای تازه کارها – بخش اول

یک راهنمای NODE.JS برای تازه کارها – بخش اول

شاید توجه کرده باشید که این اواخر بیشتر درباره Node.js و Express.js یا Socket.io پست منتشر می کنم ( فکر کنم عاشق اینجور تکنولوژی های جدید شدم 😛  ) و به منتشر کردن پست هایی با موضوعات سنتی مثل HTML، CSS، WordPress یا PHP کم لطفی می کنم. دلیل اینکه بیشتر درباره تکنولوژی نسبتا جدیدی مثل Node صحبت می کنم بسیار واضح است! می خواهم دانش و مهرات هایی که در طول یک سال آشنایی با Node.js در وب سایت ها و بلاگ های دیگر کسب کرده ام را با شما تقسیم کنم. البته این دلیل نمی شود که تنها درباره Node پست منتشر کنم. امیدوارم به زودی طیف گسترده ای از موضوعات را تحت پوشش قرار دهم یا دهیم. 🙂

 

چند وقت پیش یکی از دوستان که در زمینه طراحی وب سایت مشغول به کار است، از من پرسید که: خوب حالا نود جی اس یاد می گیری که چه شود؟ 🙄  چه فرق با دیگر تکنولوژی هایی مثل LAMP دارد؟ به چه دردی می خورد؟! من نمی گویم که PHP و MySQL را کنار بگذاریم و بیاییم از Node.js و AngularJS و دیتابیس هایی مثل MongoDB و استفاده کنیم. ما می توانیم در کنار این تکنولوژی های سنتی از تکنولوژی های جدید نیز برای ساخت چیزهای جذاب استفاده کنیم. دو چیز مهم Node.js را از دیگر فریم ورک های موجود متمایز می کند، اولی، رویدادهای ناهمگام (asynchronous events) و دومی استفاده از زبان جاوا اسکریپت به عنوان زبان سمت سرور است. یکی دیگر از کارهای جذابی که با نود جی اس می شود انجام داد ساخت برنامه های real-time چت است که فکر نکنم کسی دوست نداشته باشه طریقه ساخت یک سیستم چت با Node.js را نداند. 🙂 برای ساخت یک سیستم چت ساده می توانید آموزش نوشتن یک آپ چت با Socket.IO را مطالعه کنید. (پیشنهاد می شود وقتی سراغ اینجور موضوعات بروید که نود را درک کرده باشید.) 🙂

 

رویدادهای آسنکرون (Asynchronous Events)

 

در حالی که بیشتر فریم ورک های server-side موجود از معماری همگام (synchronous) استفاده می کنند، Node.js از معماری ناهمگام (asynchronous) استفاده می کند که جاوا اسکریپت آن را هندل می کند. به این معناست که سرور به رویدادها و ارسال رویدادها مثل یک دیتابیس واکنش نشان می دهد. این سبک از برنامه نویسی بسیار متفاوت از سبک synchronous است، و استفاده از آن در دیگر زبان ها می تواند دشوار باشد. برای اطلاعات بیشتر Event Driven Architecture را مطالعه کنید.

 

جاوا اسکریپت

 

JavaScript یک زبان برنامه نویسی و اسکریپت نویسی است که در برنامه های وب به عنوان client-side استفاده می شود. (یعنی در کدها در مرورگر کاربر اجرا می شود). با استفاده از همان زبان در سمت سرور (server-side) بدان معناست که توسعه دهنده می تواند با داشتن دانش جاوا اسکریپت خود در client-side و server-side برنامه بنویسد. شدیدا پیشنهاد می کنم که معرفی Node.js توسط Rayan Dahl را مشاهده کنید. Rayan Dahl سازنده نود می باشد که معماری event-driven را با جزئیات بیشتر توضیح می دهد.

 

Ryan Dahl

 

همانطور که می دانیم، این روزها Node به یکی از موضوعات داغ تبدیل شده است. از توسعه و طراحی وب سایت تا صنعت روباتیک حرف از Node.js است. پیشنهاد می کنم یک مقدمه مختصر برای Node.js را مطالعه کنید تا با مزایا و معایب آن آشنا شوید. اگر می خواهید دانش خود را ارتقا دهید و علاقه مند به یادگیری تکنولوژی های مدرن هستید، و اگر یک گیک هستید! یا اگر دوست دارید یک هکر باشید (: الان فرصت خوبیست که دنبال این موضوعات هل داده شوید. 🙂

 

equation

 

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

 

در جستجو در وب فارسی به این نتیجه رسیدم که کمبود آموزش Node.js احساس می شود، بیشتر آموزش ها موارد خاصی یا پیشرفته ای را پوشش می دهند یا اینکه باید از قبل نود را در سیستم خود راه اندازی کرده باشید، پس تصمیم گرفتم پس از اتمام مجموعه آموزش های جاوا اسکریپت، مجموعه از Node.js هم داشته باشیم، همانطور که می دانیم برای کار با Node.js یا Express.js یا امثال اینجور تکنولوژی ها، از قبل باید با جاوا اسکریپت خالص آشنایی داشته باشیم. (البته به نظر من اگر از قبل با کدهای خالص جاوا اسکریپت کار نکرده اید هم می توانید شروع به یادگیری نود کنید، تنها به کمی آشنایی قبلی با مفاهیم برنامه نویسی و علاقه و صبر نیاز دارید، کار با نود بطور خودکار باعث می شود که دانش نوشتن جاوا اسکریپت شما نیز افزایش یابد). در سایت موزیلا مستندات خوبی برای شروع جاوا اسکریپت وجود دارد که پیشنهاد می کنم از آنجا شروع کنید، یا می توانید با فیلم های آموزش Tutsplus یا Lynda شروع کنید. در سایت بابون نیز به زودی ادامه مجموعه آموزش جاوا اسکریپت و همچنین git را خواهیم داشت. 😉

 

Mozilla_dinosaur_head_logo

 

به نظر من برای تبدیل شدن به یک توسعه دهنده و برنامه نویس وب نباید طیف دانش خود را تنها به HTML و CSS و WP محدود کرد. تنها کافیه با صبر و حوصله تکنولوژی های مورد نیاز را آهسته یاد بگیریم تا در آینده بتوانیم با آنها چیزهای خفن ایجاد کنیم. 😉 (البته این تنها نظر شخصی من است!) خیلی خـــــوب! تا همین جا کافیه!!! بیایید، یک معرفی کوتاه از نود داشته باشیم، آن را نصب کنیم، و بعد ویرایشگر محبوب خود را باز کنید تا جند خط کد با Node بنویسیم و هک را شروع کنیم. 🙂

 

نود جی اس چیست؟

 

اولین بار که با node آشنا شدم، در ابتدا باعث سردرگمی من شد و توضیحات داخل سایت nodejs.org هم قطعا کمکی نکرد.

 

نکته مهم برای درک بهتر نود این است که Node یک وب سرور نیست. به خودی خود چیزی را انجام نمی دهد. عملکرد آن شبیه به آپاچی نیست. هیچ فایل config که باعث شود به فایل HTML شما اشاره کند وجود ندارد. اگر می خواهید یک سرور HTTP داشته باشید، باید خودتان آستین ها را بالا بزنید و سرور HTTP خود را با استفاده از کتابخانه های از پیش ساخته شده بنویسید، همین چیزهاست که جذابیت Node را بیشتر کرده است. 🙂 NodeJS یک روش متفاوت برای اجرا کدهای شما فراهم می کند.

 

نصب و راه اندازی نود

 

نصب Node.js بسیار راحت است. اگر از Windows، Mac، Linux استفاده می کنید فایل نصب را از بخش دانلود دریافت و نصب کنید. البته روش دیگری نیز برای نصب نود وجود دارد و آن استفاده از NVM است (این روش برای کسانی تازه با نود آشنا شده اند توصیه نمی شود).

 

من نود را نصب کردم، خوب حالا که چه؟

 

پس از نصب دستور node را در خط فرمان یا ترمینال خود وارد کنید تا به نود دسترسی داشته باشید. شما از دستور node می توانید به دو روش استفاده کنید. اولی، فراخوانی بدون آرگومان ها، این کار باعث می شود یک پوسته تعاملی (REPL) جایی که می توانید جاوا اسکرپت های خالص را اجرا کنید.

 

 

node-hello-world

 

در مثال فوق دستور console.log('Hello, World!') داخل shell تایپ کردیم و اینتر را زدیم. Node آن کد را اجرا کرد و پیام را چاپ کرد. همچنین undifined نیز چاپ شد، به این خاطر که هر دستور و console.log هیچ مقداری را بر نیم گرداند.

 

روش دوم اجرا نود، ارائه یک فایل جاوا اسکریپت برای اجرا است. این روشی است که در ادامه از آن استفاده می کنیم (این روش را بیشتر در آموزش های Express دیده ایم).

 

 

فایل app.js را ایجاد کنید و کدهای فوق را داخل آن ذخیره کنید.

 

atom-node

 

بله درست حدس زده اید، حال برای اجرا کدهای فایل app.js دستور node app.js را اجرا کنید.

 

cmder-hello-world

 

در این مثال، console.log را در یک فایل منتقل کردم و آنگاه آن فایل را به عنوان یک آرگومان به node پاس دادم. نود فایل اسکریپت را اجرا می کند و پیام Hello, World را در کنسول چاپ می کند.

 

انجام کاری سودمند – ساخت سرور HTTP

 

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

 

فایل server.js را ایجاد کرده و کدهای زیر را وارد کنید.

 

 

وقتی که می گویم ساده، یعنی یک سرور http ابتدایی. این سرور قرار نیست که تمام ویژگی های سرور HTTP را داشته باشد. نمی تواند هر فایل HTML یا عکسی را هندل کند. در واقع، توجه ای به درخواست هایی که شما می دهید نمی کند، تنها یک پیام Hello, World بر می گرداند. به هر حال، شما می توانید این را در مرورگر خود از آدرس http://localhost:3000 اجرا کنید و متن را مشاهده کنید.

 

 

node-server-http

 

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

 

خوب، امیدوارم از این پست لذت برده باشید، در بخش بعد موضوعات دیگر را پوشش می دهیم. 😉