آموزش گام به گام نوشتن و اجرا کردن اولین برنامه Node.js
در این مقاله میخوانید
- پیشنیازهای نوشتن و اجرای برنامه در Node.js
- قدم 1. نمایش اطلاعات روی کنسول
- قدم 2. اجرای برنامه Node js
- قدم 3. دریافت ورودی از کاربر ازطریق خط فرمان
- قدم 4. دسترسی به متغیرهای محیطی
- قدم 5. دسترسی به یک متغیر محیطی خاص
- قدم 6. نمایش یک آرگومان در پاسخ به درخواست کاربر
- قدم 7. مشاهده چندین متغیر محیطی
- قدم 8. مدیریت ورودیهای تعریفنشده
- سخن نهایی
- سؤالات متداول
نوشتن اولین برنامه Node.js ممکن است آرزوی بسیاری از علاقهمندان حوزه برنامهنویسی باشد. Node.js یکی از محیطهای اجرای محبوبی است که میتواند کدهای جاوااسکریپت را خارج از مرورگر و با استفاده از موتور جاوااسکریپت V8 اجرا کند. از این محیط اجرا معمولاً برای نوشتن ابزارهای خط فرمان و وبسرور استفاده میشود.
مهمترین مزیت Node.js این است که میتوانید کدهای فرانتاند و بکاند را با زبان واحد بنویسید. این موضوع باعث صرفهجویی در زمان شما خواهد شد و درعینحال، بسیار راحتتر میتوانید از کتابخانههای اشتراکی بین فرانتاند و بکاند استفاده کنید.
موضوع دیگر این است که بهدلیل پشتیبانی از اجرای نامتقارن، Node.js یکی از زبانهای برتر برای اجرای دستورهای وابسته به ورودیوخروجی و نوشتن صفحات وب است. برنامههای بلادرنگ مثل وبسایتهای استریم ویدئو و برنامههایی که بهصورت مستمر اطلاعات مختلف را ارسال و دریافت میکنند، اگر با استفاده از Node.js نوشته شوند، خیلی روانتر اجرا خواهند شد.
با مطالعه این مقاله، میتوانید اولین برنامه خودتان را با استفاده از Node.js بنویسید. در مقاله حاضر، با برخی از مفاهیم اختصاصی Node آشنا خواهید شد و میتوانید برنامهای بنویسید که متغیرهای محیطی (Environment Variables) موجود در سیستم را به کاربر نمایش میدهد.
برای نوشتن این برنامه، نحوه نمایش رشتههای متنی روی کنسول و دریافت ورودی از کاربر و دسترسی به متغیرهای محیطی را نیز یاد میگیرید.
خرید سرور لینوکس با قابلیت نصب Node.js از پارس پک
شما میتوانید از این مقاله برای مدیریت سرویس لینوکس خود استفاده کنید و اگر قصد خرید هر یک از سرویسهای لینوکسی پارس پک را دارید، میتوانید با کارشناسان فروش ما در ارتباط باشید. همچنین، شما میتوانید برای اطلاع از تعرفهها و هزینهها به لینکهای زیر مراجعه کنید.
پیشنیازهای نوشتن و اجرای برنامه در Node.js
برای اتمام این آموزش و نوشتن اولین برنامه Node.js به این پیشنمایشها نیاز خواهید داشت:
- Node.js باید روی دستگاه شما نصب شده باشد. در این آموزش، از Node.js نسخه 10.16.0 استفاده میکنیم.
- آشنایی با جاوا اسکریت
قدم 1. نمایش اطلاعات روی کنسول
برای نوشتن اولین برنامه خودتان با استفاده از Node.js، یکی از ویرایشگرهای متن مانند Nano را باز و با کمک آن فایل جدیدی ایجاد کنید:
nano hello.js
پس از اینکه ویرایشگر متن را باز کردید، قطعه کد زیر را داخل آن بنویسید:
console.log("Hello World");
عنصر Console در Node.js امکان دسترسی آسان به تمامی جریانهای Node.js نظیر stdout و stderr را به شما میدهد. در اینجا، ما با خط فرمان (Command Line) کار میکنیم. متد log هم وظیفه نمایش اطلاعات در stdout را برعهده دارد و هر متنی که داخل پرانتز باشد، در کنسول نمایش خواهد داد.
در Node.js، جریان (Stream) عنصری است که میتواند اطلاعاتی را دریافت کند یا در خروجی نمایش دهد. جریانهای stdout و stderr هر اطلاعاتی که دریافت کنند، در کنسول نمایش میدهند.
نکته جالب درباره جریانها این است که بهراحتی میتوانید جهت آنها را تغییر دهید. برای مثال، بهجای نمایش اطلاعات روی کنسول، میتوانید تعیین کنید که اطلاعات به برنامه یا فایل دیگری منتقل شوند.
فایل ایجادشده را با استفاده از کلیدهای ترکیبی CTRL+X ببندید و سپس، کلید Y را فشار دهید تا فایل ذخیره شود. اکنون، برنامه شما آماده اجراست.
قدم 2. اجرای برنامه Node js
برای اجرا برنامه نوشتهشده، از دستور Node استفاده کنید:
node hello.js
با این کار، برنامه hello.js اجرا و خروجی زیر را نمایش داده میشود:
Output Hello World
مفسر زبان Node.js فایل برنامه را میخواند و دستور console.log(“Hello World”); را با خواندن متد log عنصر Console اجرا میکند. سپس، رشته متنی “Hello World” بهعنوان آرگومان به تابع log منتقل میشود. با اینکه علامت نقلقول یا کوتیشن برای نشاندادن اینکه متن مدنظر یک رشته است، ضروری است، این علامتها به خروجی منتقل نمیشوند.
اکنون که با نحوه کار Node.js آشنا شدیم، اجازه دهید کمی برنامه مدنظر را تعاملیتر کرده و نوشتن اولین برنامه Node.js را شروع کنیم.
قدم 3. دریافت ورودی از کاربر ازطریق خط فرمان
هر بار که برنامه “Hello World” را اجرا کنید، خروجی آن ثابت است و هیچ تغییری نمیکند. برای اینکه برنامه را کمی پویاتر کنیم، میتوانیم از کاربر ورودی دریافت کنیم و آن را روی مانیتور نمایش دهیم.
ابزارهای خط فرمان معمولاً آرگومانهای مختلفی را دریافت میکنند که باعث تغییر رفتار آنها خواهد شد. برای مثال، اجرای دستور node بههمراه آرگومان ورژن Node.js نصبشده را نمایش خواهد داد و مفسر Node.js را اجرا نمیکند. درادامه، یاد میگیریم که چگونه با استفاده از آرگومانهای خط فرمان از کاربر ورودی دریافت کنیم.
با استفاده از ویرایشگر Nano، فایلی جدید با عنوان arguments.js ایجاد کنید:
nano arguments.js
سپس قطعه کد زیر را داخل آن وارد کنید:
console.log(process.argv);
عنصر Process یکی از عناصر Global نود جیاس است که تمامی توابع و اطلاعات مربوط به فرایند در حال اجرای فعلی در آن گنجانده شده است. ویژگی argv هم آرایهای از رشتههاست که تمامی آرگومانهای خط فرمانِ دادهشده به هر برنامه داخل آن قرار دارد.
پس از واردکردن قطعه کد بالا، با کلیدهای ترکیبی CTRL+X و سپس فشاردادن کلید Y فایل ایجادشده را ذخیره کنید و ببندید. حالا میتوانید در زمان اجرای برنامه، یک آرگومان خط فرمان بهشکل زیر نیز دراختیارش قرار دهید:
node arguments.js hello world
خروجی برنامه شما بهشکل زیر خواهد بود:
Output [ '/usr/bin/node', '/home/sammy/first-program/arguments.js', 'hello', 'world' ]
اولین آرگومان در آرایه process.argv همیشه محل باینری Node.js است که مسئول اجرای برنامه شناخته میشود. دومین آرگومان هم محل اجرای برنامه است. آرگومانهای دوم نیز ورودی کاربر است که در این نمونه، رشتههای Hello و World است. بههمین راحتی نوشتن اولین برنامه Node.js را روه به یادگیری میکنید.
همانطورکه میدانید، بیشتر به آرگومانهایی نیاز داریم که کاربر وارد میکند، نه آرگومانهایی که Node.js دراختیار ما قرار میدهد. برای تغییر کدها، دوباره فایل Arguments.js را باز کنید:
nano arguments.js
سپس، کدی که در مرحله قبلی نوشته بودید، بهشکل زیر تغییر دهید:
console.log(process.argv.slice(2));
ازآنجاکه argv یک آرایه است، میتوانید از متد Slice جاوااسکریپت برای فراخواندن مجموعهای از عناصر استفاده کنید. زمانی که از متد Slice بههمراه عدد ۲ استفاده کنید، میتوانید تمامی عناصر argv که پس از عنصر دوم وارد شدهاند (یعنی عناصر واردشده کاربر)، را روی صفحه چاپ کنید.
دوباره برنامه را با دستور Node و همان آرگومانهای قبلی اجرا کنید:
node arguments.js hello world
اکنون، خروجی برنامه بهشکل زیر خواهد بود:
Output [ 'hello', 'world' ]
همانطورکه دیدید، دریافت ورودی از کاربر کار راحتی است؛ اما چگونه میتوانید از محیط برنامه خروجی دریافت کنید؟
قدم 4. دسترسی به متغیرهای محیطی
متغیرهای محیطی (Environment Variables) اطلاعات مهمی هستند که خارج از برنامه نگهداری میشوند. معمولاً سیستم یا خود کاربر این اطلاعات را ایجاد خواهند کرد و تمامی فرایندهای در حال اجرا میتوانند به آنها دسترسی داشته باشند. شما هم میتوانید ازطریق عنصر Process در Node.js به این متغیرها دسترسی داشته باشید.
با استفاده از ویرایشگر Nano، فایلی با نام environment.js ایجاد کنید:
nano environment.js
سپس، کد زیر را داخل آن وارد کنید:
console.log(process.env);
عنصر env تمامی متغیرهای محیطی موجود در زمان اجرای برنامه با Node.js را داخل خودش نگهداری خواهد کرد. همچون گذشته، با کلیدهای ترکیبی CTRL+X و سپس کلید Y فایل ایجادشده را ذخیره و پسازآن، با دستور Node آن را اجرا کنید:
node environment.js
پس از اجرای برنامه، خروجی زیر را مشاهده خواهید کرد:
Output { SHELL: '/bin/bash', SESSION_MANAGER: 'local/digitalocean:@/tmp/.ICE-unix/1003,unix/digitalocean:/tmp/.ICE-unix/1003', COLORTERM: 'truecolor', SSH_AUTH_SOCK: '/run/user/1000/keyring/ssh', XMODIFIERS: '@im=ibus', DESKTOP_SESSION: 'ubuntu', SSH_AGENT_PID: '1150', PWD: '/home/sammy/first-program', LOGNAME: 'sammy', GPG_AGENT_INFO: '/run/user/1000/gnupg/S.gpg-agent:0:1', GJS_DEBUG_TOPICS: 'JS ERROR;JS LOG', WINDOWPATH: '2', HOME: '/home/sammy', USERNAME: 'sammy', IM_CONFIG_PHASE: '2', LANG: 'en_US.UTF-8', VTE_VERSION: '5601', CLUTTER_IM_MODULE: 'xim', GJS_DEBUG_OUTPUT: 'stderr', LESSCLOSE: '/usr/bin/lesspipe %s %s', TERM: 'xterm-256color', LESSOPEN: '| /usr/bin/lesspipe %s', USER: 'sammy', DISPLAY: ':0', SHLVL: '1', PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', DBUS_SESSION_BUS_ADDRESS: 'unix:path=/run/user/1000/bus', _: '/usr/bin/node', OLDPWD: '/home/sammy' }
بهخاطر بسپارید بسیاری از متغیرهای محیطیای که مشاهده میکنید، به تنظیمات سیستم شما بستگی دارند و ممکن است خروجیای که میبینید، با خروجی بالا بسیار متفاوت باشد.
همچنین، شاید نیاز داشته باشید بهجای دیدن فهرست تمامی متغیرهای محیطی موجود، فقط یک متغیر خاص را ببینید. در مرحله بعدی، نحوه انجام این کار را نیز خواهید آموخت.
قدم 5. دسترسی به یک متغیر محیطی خاص
در این مرحله، یاد میگیریn که چگونه متغیرهای محیطی و مقادیر مربوط به آنها را با عنصر process.env ببینید و مقادیر آنها را روی کنسول نمایش دهید.
عنصر process.env نقشهای ساده بین اسم متغیرهای محیطی و مقادیر هرکدام از آنهاست. مانند تمامی عناصر موجود در جاوااسکریپت، در اینجا هم میتوانید با نوشتن اسم ویژگی خاصی در براکت، به آن دسترسی داشته باشید.
فایل environment.js را با استفاده از ویرایشگر Nano باز کنید:
nano environment.js
کد داخل آن را بهشکل زیر تغییر دهید:
console.log(process.env["HOME"]);
سپس، فایل را ذخیره و با دستور Node آن را اجرا کنید:
node environment.js
حالا خروجی برنامه شما چیزی شبیه به قطعه کد زیر خواهد بود:
Output /home/sammy
در این مرحله، بهجای اینکه کل عنصر را روی کنسول نمایش دهید، فقط مشخصه HOME آن را نمایش دادهاید. این مشخصه حاوی اطلاعات مربوط به متغیر محیطی $HOME است.
بازهم تکرار میکنیم که آنچه در سیستم خودتان مشاهده میکنید، ممکن است با خروجی بالا نسبتاً متفاوت باشد؛ زیرا متغیرهای محیطی به تنظیمات سیستم کاملاً وابسته هستند.
حال که نحوه تعیین متغیرهای محیطی را یاد گرفتیم، میتوانیم برنامه را بهگونهای تغییر دهیم که فقط متغیرهای محیطی مدنظر کاربر را نمایش دهد.
قدم 6. نمایش یک آرگومان در پاسخ به درخواست کاربر
در این مرحله، از توانایی دریافت اطلاعات از خط فرمان و استفاده از متغیرهای محیطی استفاده میکنیم تا ابزاری ایجاد کنیم که با کمک آن بتوانیم مقادیر متغیرهای محیطی را در پاسخ به کاربر روی صفحه نمایش دهیم.
از ویرایشگر Nano برای ایجاد فایلی با عنوان echo.js استفاده کنید:
nano echo.js
درادامه، قطعه کد زیر را داخل آن اضافه کنید:
const args = process.argv.slice(2); console.log(process.env[args[0]]);
در خط اول کد بالا، تمامی آرگومانهای خط فرمان که کاربر تأمین کرده است، داخل متغیری ثابت به نام args قرار میگیرد. خط دوم هم متغیرهای محیطیای را نمایش خواهد داد که در متغیر args قرار دارند.
درواقع، اولین آرگومان خط فرمانی که کاربر تأمین کرده باشد، در متغیر args قرار میگیرد و سپس در خط دوم، متغیر محیطی مربوط به آن فراخوانی میشود.
فایل ایجادشده را ذخیره کنید و ببندید. سپس، آن را به شکل زیر اجرا کنید:
node echo.js HOME
خروجی شما چیزی شبیه به خروجی زیر خواهد بود:
Output /home/sammy
آرگومان Home داخل آرایه args ذخیره میشود و سپس با استفاده از عنصر process.env مقدار مرتبط به آن در متغیرهای محیطی پیدا میشود. با استفاده از این برنامه شما میتوانید به مقادیر تمامی متغیرهای محیطی سیستم خودتان دسترسی داشته باشید. برای تأیید این موضوع، بهجای HOME میتوانید از متغیرهایی مثل PWD و USER و PATH استفاده کنید.
تا اینجا یاد گرفتیم که چگونه یک متغیر محیطی را فراخوانی کنیم؛ اما بهتر است که به کاربر اجازه دهید خودش تعیین کند که میخواهد چند متغیر محیطی را فراخوانی کند.
قدم 7. مشاهده چندین متغیر محیطی
درحالحاضر، برنامه نوشتهشده فقط میتواند یک متغیر محیطی را درلحظه نمایش دهد؛ اما بهتر بود که میتوانستیم چندین آرگومان خط فرمان را از کاربر دریافت کنیم و سپس، متغیر متناظر آن را در خط فرمان نمایش دهیم. برای این کار، دوباره با استفاده از ویرایشگر Nano فایل echo.js را باز کنید:
nano echo.js
کدهای زیر را به فایل اضافه کنید:
const args = process.argv.slice(2); args.forEach(arg => { console.log(process.env[arg]); });
forEach یکی از روشهای استاندارد جاوااسکریپت برای تمامی عناصر آرایهای است. این روش یک تابع Callback را پس از هربار گذشتن از روی عناصر آرایه دریافت خواهد کرد. درصورتیکه از forEach در آرایه args استفاده کنید، یک تابع Callback میتوانید برای آن تعیین کنید که مقدار آرگومان فعلی را در متغیرهای محیطی چاپ میکند.
فایل echo.js را ذخیره کنید و ببندید. سپس بهشکل زیر آن را اجرا کنید:
node echo.js HOME PWD
همانطورکه مشاهده میکنید، خروجی چیزی شبیه به تصویر زیر خواهد بود:
[secondary_label Output] /home/sammy /home/sammy/first-program
متد forEach به شما این اطمینان را میدهد که تمامی آرگومانهای خط فرمان موجود در آرایه args پرینت خواهند شد. اکنون میتوانید تمامی آرگومانهای درخواستی کاربر را نمایش دهید؛ اما اگر کاربر مقادیر اشتباهی را بهعنوان آرگومان وارد کرد، باید چه کار کنیم؟ نگران نباشید روش مقابله با این موضوع را هم در بخش بعدی آموزش خواهیم داد.
قدم 8. مدیریت ورودیهای تعریفنشده
برای اینکه ببینید اگر ورودی تعریفنشدهای به برنامه بدهید چه اتفاقی میافتد، برنامه نوشتهشده را بهشکل زیر اجرا کنید و تجربه خوبی از نوشتن اولین برنامه Node.js کسب کنید:
node echo.js HOME PWD NOT_DEFINED
خروجی چیزی شبیه به تصویر زیر خواهد بود:
[secondary_label Output] /home/sammy /home/sammy/first-program undefined
همانطورکه انتظار داشتیم، دو خط اول روی کنسول نمایش داده میشوند؛ اما خط آخر بهصورت Undefined نمایش داده میشود. در جاوااسکریپت مقادیر Undefined بدینمعنی هستند که مشخصه یا متغیر به هیچ مقدار مشخصی اختصاص نیافته است. ازآنجاکه NOT_DEFINED متغیر محیطی معتبری نیست، بهصورت Undefined نمایش داده میشود.
بااینحال، بهتر است بهجای عبارت Undefined، پیغام خطایی به کاربر نمایش داده شود تا متوجه شود که ورودی او اشتباه بوده است.
دوباره فایل echo.js را برای ویرایش باز کنید:
nano echo.js
فایل echo.js را بهشکل زیر ادیت کنید:
const args = process.argv.slice(2); args.forEach(arg => { let envVar = process.env[arg]; if (envVar === undefined) { console.error(`Could not find "${arg}" in environment`); } else { console.log(envVar); } });
با این کار، تابع Callback روش forEach را تغییر خواهید داد تا کارهای زیر را انجام دهد:
- مقادیر مربوط به آرگومانهای خط فرمان دریافت خواهند شد و داخل متغیری به نام envVar ذخیره خواهند شد.
- مقادیر داخل envVar بررسی خواهند شد.
- درصورتیکه envVar بهصورت Undefined باشد، پیغام خطای مناسب چاپ خواهد شد.
- اگر متغیر محیطی مدنظر هم پیدا شود، مقدار مربوط به آن چاپ میشود.
باردیگر برنامه را به همان شکل بالا اجرا کنید:
node echo.js HOME PWD NOT_DEFINED
این بار خروجی شبیه به تصویر زیر خواهد بود:
[secondary_label Output] /home/sammy /home/sammy/first-program Could not find "NOT_DEFINED" in environment
اکنون اگر از آرگومانی استفاده کنید که متغیر محیطی نیست، پیغام واضحی درباره آن دریافت خواهید کرد:
سخن نهایی
نوشتن اولین برنامه Node.js باعث شد که “Hello World” روی مانیتور نمایش داده شود و درنهایت نیز، توانستیم ابزاری را طراحی کنیم که متغیرهای محیطی را با کمک آرگومانهای کاربر نمایش میدهد. همانطور که در این مقاله آموزش لینوکس از سری مقالات آموزش سیستم عامل وبلاگ پارسپک آموختیم، درصورت نیاز، میتوانید رفتار برنامه را بازهم تغییر دهید.
برای مثال، میتوانید آرگومانهای دریافتی را قبل از نمایش خروجی اعتبارسنجی کنید. درصورتیکه آرگومانی تعریف نشده بود، پیغام خطا را برای کاربر بهنمایش بگذارید و فقط درصورتی متغیرهای محیطی را نمایش دهید که تمامی آرگومانها معتبر باشند.
سؤالات متداول
1. Node.js چیست؟
Node.js یکی از محیطهای اجرای محبوبی است که کدهای جاوااسکریپت را خارج از مرورگر و با استفاده از موتور جاوااسکریپت V8 میتواند اجرا کند.
2. مهمترین مزیت Node.js چیست؟
مهمترین مزیت Node.js پشتیبانی از زبان برنامهنویسی جاوااسکریپت، یکی از زبانهای برنامهنویسی پرطرفدار است. ناگفته نماند از Node.js هم برای توسعه فرانتاند و هم برای توسعه بکاند میتوانید استفاده کنید.
3. Node.js چه کاربردهایی دارد؟
Node.js در زمینههای مختلفی مثل اینترنت اشیاء، چتهای بلادرنگ، وبسایتها و اپلیکیشنهای تکصفحهای پیچیده و ابزارهای مشارکتی بلادرنگ کاربرد دارد.