برنامه نویسی Event-Driven یا رویدادمحور به سبک خاصی از برنامه نویسی گفته میشود که در آن روند اجرای برنامه توسط رویدادها تعیین میشود. Node.js نیز یکی از زبانهای برنامهنویسی است که طبق معماری رویداد محور عمل میکند.
همین موضوع باعث شده تا یادگیری این زبان برای مبتدیان سخت باشد ولی سرعت اجرای بالا در node.js محبوبیت زیادی در میان برنامهنویسان دارد. در این مطلب برخی از اصول پایهای node.js معرفی شده که شناخت بهتری را به کاربران میدهد.
معرفی
برای شروع کار با Node.js ابتدا باید تفاوت بین Node.js و محیطهای اسکریپت نویسی سمت سرور دیگری مثل PHP، پایتون و رابی را بدانید.
برنامه نویسی غیرهم زمان( Asynchronous Programming)
Node.js از معماری ماژول محور برای تولید اپلیکیشن های پیچیده استفاده میکند. هر عملکرد و تابعی در Node.js غیر همزمان است. در I/O ناهمگام، هیچ پروسهای منتظر به پایان رسیدن پروسههای دیگر نمیماند. بنابراین هر thread که در روند فعلی برنامه متوقف شود، در پس زمینهی آن اجرا خواهد شد. این مهمترین ویژگی است که باید در مورد node.js بدانید.
به عنوان مثال زمانی که میخواهید فایلی را از میان فایلهای سیستمی بخوانید، باید یک تابع callback مشخص کنید که وقتی عمل خواندن به اتمام رسید، اجرا شود.
در Node.js انجام هر کاری به عهده شماست!
Node.js تنها یک محیط است و شما موظف هستید تمامی موارد را خودتان ذکر کنید. همین موضوع باعث میشود تا کار با این محیط برای کاربران جدید دشوار و خسته کننده به نظر برسد. در ادامه کدهای Node.js برای یک برنامهی بسیار ساده را میبینید:
و معادل آن در PHP:
جدول زیر این دو زبان را از نظر زمان پاسخدهی مقایسه میکند:
در تکرارهای پایین، 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 روی سیستم عامل 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 برایتان نمایش داده خواهد شد.
منبع:
tutsplus