اگر تاکنون کلمه برنامهنویسی به گوشتان خورده باشد، بیشک نام زبان برنامه نویسی C را نیز شنیدهاید. C یکی از قدیمیترین زبانهای کدنویسی موجود است. برخی از آن میترسند، برخی دیگر نیز عاشقش هستند. زبان C به خاطر دشواری یادگیری برای افراد مبتدی مشهور است. دلایل زیادی برای یادگیری این زبان وجود دارد، اما پیش از شروع به این کار چند نکته مهم وجود دارند که باید به خاطر بسپارید.
برای این که بدانید ماهیت زبان برنامهنویسی C چیست، بهتر است ابتدا با مفهوم کدنویسی آشنا شوید. بدین منظور پیشنهاد میکنیم ابتدا مطلب زیر را مطالعه نمایید:
C یک زبان برنامهنویسی رویهای سطح پایین است که به کد ماشینی که رایانه اجرا میکند، بسیار نزدیک است. این وضعیت موجب میشود که این زبان بسیار سریع باشد؛ اما استفاده از آن چالشبرانگیز است و در صورتی که مراقب نباشید، ممکن است به سیستم خود آسیب بزنید.
اگر C چنین پیچیده و خطرناک است، پس اصلاً چرا باید آن را آموخت؟ پاسخ این است که:
برخی افراد فکر میکنند که یادگیری C پیش از هر زبان دیگر برنامهنویسی موجب میشود که فرد درک بهتری از برنامهنویسی به صورت کلی داشته باشد.
یادگیری C در واقع به معنی یادگیری طرز کار رایانهها نیز هست. برنامه نویسان C میتوانند درک عمیقتری از شیوه تأثیر کد روی سیستمها داشته باشند و در نتیجه یادگیری زبانهای برنامهنویسی دیگر برای آنها آسانتر خواهد بود.
دادهها در انواع مختلفی هستند. دانستن این که با چه نوع دادهای سر و کار داریم حائز اهمیت است، زیرا در غیر این صورت ممکن است موجب ایجاد سردرگمی شوند. به عنوان مثال باید بدانیم که عدد 5 میتواند یک «عدد صحیح» (Integer) باشد و همچنین میتواند یک کاراکتر متنی باشد.
کد فوق دیگر موجب سردرگمی نمیشود، چون مقدار صحیح 5 به متغیر عددی انتساب یافته است. باید به C اعلام شود که چه نوع دادهای میتواند بپذیرد تا بتواند به طرز بهتری با دادهها کار کند. انواع داده و روشهای انتساب آنها به متغیرها بخشی ضروری از یادگیری C محسوب میشود و درک آنها حائز اهمیت بالایی است. دانستن شیوه انتساب انواع صحیح به دادهها، در همه زبانهای برنامهنویسی یک مهارت مهم محسوب میشود، اما در زبان C کاملاً ضروری است.
اگر C نخستین زبان برنامهنویسی است که یاد میگیرید، احتمالاً نخستین باری است که با عملگرها آشنا میشوید. عملگرها نمادهایی هستند که به کامپایلر اعلام میکنند یک وظیفه را اجرا کند. شاید سادهترین مثال عملگر + است.
درک این که کد فوق دو متغیر صحیح را با هم جمع میکند کار دشواری محسوب میشود. البته همه عملگرها به این سادگی نیستند. C از عملگرهای زیادی برای عملیات حسابی، انتسابی، منطقی و موارد دیگر استفاده میکند. دانستن این که هر کدام از این عملگرها چه کاری انجام میدهند، به شما کمک میکند که مفاهیم برنامهنویسی را سریعتر درک کنید.
C ممکن است یک زبان سطح پایین باشد؛ اما مجموعهای از کتابخانهها برای کمک به ایجاد برنامهها دارد. عملیات حسابی، دادههای خاص locale (مانند نمادهای پولی) و انواع متغیرهای مختلف و ماکروها، همگی مواردی هستند که در این کتابخانهها تعریف شدهاند.
شما میتوانید با گنجاندن این کتابخانهها در کد خود، آنها را مورد استفاده قرار دهید. مثال زیر را در نظر بگیرید:
در C عمل ساده خروجی دادن به کنسول نیازمند گنجاندن فایل هدر stdio.h (کتابخانه استاندارد ورودی/خروجی) است. 15 کتابخانه استاندارد مختلف برای برنامهنویسی در زبان C وجود دارند که هر یک وظایف مختلفی بر عهده دارند.
زبان C دقیقاً همان کاری را انجام میدهد که به آن اعلام شده است و به جای این که در صورت بروز موقعیتهای بیمعنی شکایت کند، به تلاش خود در جهت اجرای وظیفهاش ادامه میدهد. این وضعیت نه تنها میتواند منجر به از کار افتادن برنامه شما بشود؛ بلکه ممکن است کل سیستم را از کار بیندازد.
با این که این وضعیت بغرنج به نظر میرسد؛ اما معمولاً چنین نیست. شما قرار نیست رایانه خود را خراب بکنید؛ اما ممکن است در نهایت چندین باگ در برنامهتان کشف کنید. به مثال زیر توجه کنید:

این قطعه کد سؤالهایی را در کنسول نمایش میدهد و سپس ورودیهای کاربر را پیمایش کرده و آنها را در اعداد صحیحی ذخیره میکند. این برنامه برای جمع و تفریق کردن اعداد پیش از نمایش مجدد پاسخ به کاربر طراحی شده است. احتمالاً متوجه شدهاید که اشکالی در این برنامه وجود دارد؛ چون خروجی قطعاً بیمعنی است:

از آنجا که ما هرگز مقادیر را تفریق نکردهایم؛ متغیر تفریق مقدار بیمعنی دارد. زبانهای برنامهنویسی دیگر در مواردی که به متغیر تفریق هیچ مقداری نداده باشید، خطایی به شما نمایش میدهند، اما C چنین نیست.
دیباگ کردن این مثال کار آسانی است، اما برخی کدها از هزاران خط تشکیل یافتهاند و بینهایت پیچیده هستند و C کمکی به یافتن خطاها نمیکند. به جای آن C یک پاسخ بیمعنی ارائه میکند و شما خودتان باید دریابید که چرا چنین اتفاقی افتاده است. البته یک گزینه دیگر نیز وجود دارد که در بخش بعدی توضیح میدهیم.
از آنجا که کدهای C شامل رفتارهای ناخواستهای هستند، ممکن است موجب بروز خطاهایی شوند که ردگیری آنها دشوار باشد و دلیل ظاهری مشخصی نداشته باشند. در این موارد برای این که عقلتان را به طور کامل از دست ندهید، باید در زمینه دیباگ کردن کد مهارت پیدا کنید. یک ابزار دیباگر مانند GDB میتواند در این زمینه کمک کند. GDB در تصویر زیر روی اسکریپت دارای خطا عمل میکند.

به طور معمول یک برنامه تا زمانی که پایان یابد یا از کار بیفتد، اجرا میشود. ابزار دیباگ امکان توقف کد را به صورت خط به خط میدهند. در کد فوق نقاط توقف روی خطهای 10 و 13 که مشکوک به وجود مشکل هستند، تنظیم شدهاند.
سپس برنامه به صورت نرمال اجرا میشود. اعداد که وارد شدند، در ادامه برنامه پس از خط 10 مکث میکند. ابزار دیباگ از شما میخواهد که مقدار تفریق شده را نمایش دهید که عدد 37 را نمایش میدهد. این وضعیت معنیدار است، چون ما هنوز از آن نخواستهایم که تفریقی انجام دهد و از این رو یک مقدار تصادفی است. در ادامه دیباگر کار خود را به پیش میبرد. این فرایند پس از خط 13 نیز ادامه مییابد و مقدار تفریق شده تنها برای یافتن مقداری که تغییر یافته است نمایش مییابد.

بدین ترتیب مشخص میشود که ما کلاً فراموش کردهایم مقدار را محاسبه کنیم و به جای آن یک خط خالی از کد قرار دادهایم. درک این نکته به لطف دیباگر ممکن شده است. GDB بهترین دوست کدنویسهای C است و هر چه زودتر کار با آن را یاد بگیرید، خوشحالتر خواهید بود.
زبان C در واقع یک تجربه یادگیری به درازای عمر است و موارد مهمی مانند اشارهگرها و تخصیص حافظه در آن وجود دارند که در این مقاله اصلاً اشاره نکردهایم. با این که C مشهور به زبان دشوار است؛ اما شما میتوانید با تمرین آن را یاد بگیرید، بنابراین دست به کار شوید و در اولین فرصت شروع به یادگیری آن بکنید
منبع: فرادرس
جستجوی تمام متن یک قابلیت ضروری جهت فراهم ساختن امکان حرکت در میان صفحههای وبسایتهای با محتوای گسترده است. در این مقاله، شیوه پیادهسازی امکان جستجوی تمام متن را برای یک اپلیکیشن لاراول بررسی میکنیم. در واقع ما از کتابخانه Scout لاراول استفاده میکنیم که پیادهسازی جستجوی تمام متن را به امری ساده و جذاب تبدیل کرده است.
مستندات رسمی، کتابخانه Scout لاراول را به صورت زیر توصیف میکنند:
کتابخانه Scout لاراول یک راهحل ساده و مبتنی بر درایور برای افزودن امکان جستجوی تمام متن به مدلهای Eloquent ارائه میکند. Scout با استفاده از «مشاهدهگرهای مدل» (model observers) به طور خودکار اندیسهای جستجو را در وضعیتی همگامسازی شده با رکوردهای Eloquent حفظ میکند.
کتابخانه Scout لاراول به مدیریت دستکاری اندیسها در زمان بروز تغییراتی در دادههای مدل میپردازد. جایی که دادهها اندیس میشوند به درایوری وابسته است که برای کتابخانه Scout پیکربندیشده است.
در حال حاضر کتابخانه Scout از Algolia پشتیبانی میکند که یک API موتور جستجوی مبتنی بر کلود است و ما نیز در این مقاله از آن برای نمایش پیادهسازی جستجوی تمام متن استفاده خواهیم کرد.
ما کار خود را با نصب کتابخانههای Scout و Algolia server آغاز میکنیم و در ادامه برخی مثالهای واقعی را بررسی میکنیم که شیوه اندیسگذاری و جستجوی دادهها را نمایش میدهد.

در این بخش ما قصد داریم وابستگیهایی را که برای کار کردن کتابخانه Scout با لاراول لازم هستند نصب کنیم. پس از نصب، باید کمی آن را پیکربندی کنیم تا لاراول بتواند کتابخانه Scout را تشخیص دهد.
در ادامه کتابخانه Scout را با استفاده از Composer نصب میکنیم:
composer require laravel/scout
اگر صرفاً خواسته باشیم کتابخانه Scout را نصب کنیم، کار به همین سادگی است. اینک که کتابخانه Scout نصب شده است، ابتدا باید مطمئن شویم که لاراول در مورد آن اطلاع دارد.
در صورتی که با لاراول کار کرده باشید، احتمالاً با مفهوم «ارائهدهنده سرویس» (service provider) که امکان پیکربندی سرویسها در اپلیکیشن را میدهد، آشنا هستید. بدین ترتیب هر زمان که بخواهید یک سرویس جدید را در اپلیکیشن لاراول پیکربندی کنید، کافی است یک مدخل ارائهدهنده سرویس مرتبط را در config/app.php اضافه کنید.
اگر با مفهوم ارائهدهنده سرویس در لاراول آشنا نیستید؛ قویاً توصیه میکنیم که ابتدا به طور کامل با این مفهوم آشنا شوید.
در مورد اپلیکیشنی که میخواهیم طراحی بکنیم باید یک ارائهدهنده سرویس به نام ScoutServiceProvider را به فهرست ارائهدهندههای سرویس در فایل config/app.php اضافه کنیم. روش کار در قطعه کد زیر نمایش یافته است:
اینک لاراول از وجود ارائهدهنده سرویسی به نام ScoutServiceProvider آگاهی دارد. کتابخانه Scout به همراه یک فایل پیکربندی ارائه میشود که به ما امکان تنظیم نام کاربری و رمز عبور API را میدهد.
در ادامه فایلهای ارائه شده از سوی Scout را با استفاده از دستور زیر منتشر میکنیم:
همان طور که میبینید بدین ترتیب فایل vendor/laravel/scout/config/scout.php به مسیر config/scout.php کپی شده است.
در ادامه یک حساب کاربری در سرویس Algolia (+) ایجاد میکنیم، چون به نام کاربری و رمز عبور API آن نیاز داریم. زمانی که اطلاعات API را به دست آوردید میتوانید اقدام به پیکربندی تنظیمات مورد نیاز در فایل config/scout.php به شیوهای که در قطعه کد زیر نمایش یافته است، بکنید:
دقت داشته باشید که ما مقدار SCOUT_DRIVER را برابر با درایور algolia تعیین کردهایم. از این رو لازم است که تنظیمات لازم برای درایور Algolia را در انتهای فایل پیکربندی کنید. بدین منظور کافی است مقدار id و secret را که از حساب کاربری Algolia دریافت کردهاید تنظیم کنید.
همان طور که شاهد هستید، ما مقادیر را از متغیرهای محیطی واکشی کردهایم، بنابراین باید مطمئن شویم که متغیرهای زیر را در فایل env. به صورت صحیحی تعیین کردهایم:
درنهایت باید SDK مربوط به Algolia PHP را نصب کنیم که برای تعامل با Algolia از طریق API-ها ضروری است. آن را با استفاده از composer و به صورت زیر نصب میکنیم:
بدین ترتیب ما همه وابستگیهای لازم برای ارسال و اندیس کردن دادهها در سرویس algolia را در اختیار داریم.
در بخش قبلی ما همه کارهایی را که برای راهاندازی کتابخانههای Scout و Algolia لازم بود انجام دادیم و از این رو اینک میتوانیم دادهها را با استفاده از سرویس جستجوی Algolia اندیسگذاری و جستجو کنیم.
در این بخش مثالی را بررسی میکنیم که شیوه اندیس کردن دادههای موجود و بازیابی نتایج جستجو از Algolia را نمایش میدهد. تصور ما بر این است که شما مدل Post پیشفرض را در اپلیکیشن خود دارید و در مثال خود نیز از آن استفاده خواهیم کرد.
نخستین کاری که باید انجام دهیم، افزودن خصیصه Laravel\Scout\Searchable به مدل Post است. بدین ترتیب مدل Post قابل جستجو میشود و لاراول رکوردهای پست را هر بار که یک رکورد پست، اضافه، بهروزرسانی یا حذف میشود، با اندیس Algolia همگامسازی میکند.
بدین ترتیب مدل Post برای جستجو مناسبسازی میشود. در ادامه و در وهله نخست فیلدهایی را که میبایست اندیسگذاری شوند پیکربندی کنیم. البته لازم نیست همه فیلدهای مدل را در Algolia اندیسگذاری کنید و بهتر است آن را سبک و کارآمد نگه داریم. در واقع در اغلب موارد به چنین کاری نیاز هم نداریم.
میتوان toSearchableArray را در کلاس مدل اضافه کرد تا فیلدهایی که قرار است اندیسگذاری شوند، پیکربندی شوند.
اکنون آماده ایمپورت و اندیسگذاری رکوردهای موجود Post در Algolia هستیم. در واقع کتابخانه Scout این کار را از طریق ارائه دستور artisan زیر سادهتر ساخته است:
این دستور همه رکوردهای مدل Post را در یک حرکت ایمپورت میکند. همه آنها به محض ایمپورت شدن، اندیسگذاری میشوند و از این رو در این لحظه آماده کوئری زدن هستند. در ادامه داشبورد Algolia را بررسی کنید تا رکوردهای ایمپورت شده و دیگر ابزارها را مشاهده کنید.

در این بخش مثالی را ارائه میکنیم که شیوه اجرای عمل جستجو و عملیات CRUD را که به صورت آنی با اندیس Algolia همگامسازی شدهاند نمایش میدهد.
در این بخش فایل app/Http/Controllers/SearchController.php را با محتوای زیر ایجاد میکنیم:
البته ما باید مسیرهای مرتبط را نیز اضافه کنیم:
در ادامه از متد query استفاده می کنیم تا ببینیم شیوه جستجو در Algolia چگونه است:
به یاد داشته باشید که ما مدل Post را با افزودن خصیصه Searchable قابل جستجو کردهایم. از این رو مدل Post میتواند از متد search برای بازیابی رکوردها از اندیس Algolia استفاده کند. در مثال فوق ما تلاش کردهایم رکوردهایی را که با کلیدواژه title مطابقت دارند بازیابی کنیم.
در ادامه یک متد add وجود دارد که گردش کار افزودن یک رکورد جدید post را تقلید میکند.
در کد فوق هیچ نکته جذابی وجود ندارد و صرفاً یک رکورد post جدید با استفاده از مدل Post ایجاد کرده است. اما مدل Post خصیصه Searchable را پیادهسازی میکند و از این رو لاراول در این مورد به مقداری کار اضافی برای اندیس کردن رکورد جدیداً ایجاد شده در Algolia دارد. بدین ترتیب همان طور که میبینید اندیسگذاری به صورت آنی صورت میگیرد.
درنهایت یک متد delete وجود دارد که آن را نیز بررسی میکنیم:
همان طور که انتظار میرود، این رکورد بیدرنگ پس از حذف شدن از پایگاه داده از اندیس Algolia نیز حذف میشود.
در واقع در صورتی که بخواهید مدلهای موجود را قابل جستجو بکنید، نیاز به هیچ تلاش اضافی از سمت شما وجود ندارد. همه چیز از سوی کتابخانه Scout با استفاده از مشاهدهگرهای مدل مدیریت میشود.
بدین ترتیب به پایان این مقاله با موضوع بررسی اجرای جستجوی تمام متن در لاراول با استفاده از کتابخانه Scout و سرویس ابری Algolia رسیدیم. در این مسیر مواردی که لازم بود نصب شوند را توضیح دادیم و با ارائه مثالهای واقعی عملکرد آن را مورد بررسی قرار دادیم.
lمنبع: فرادرس
شما میتوانید گردش کار توسعه وب خود را با استفاده از این 7 قابلیت ویژوال استودیو کد و افزونههای آن بهبود ببخشید. چه یک توسعهدهنده حرفهای وب و چه یک فرد مبتدی باشید، در هر صورت مزیتهای یک گردش کار سریعتر بدون شک به کار شما میآید. در این مقاله به بررسی روش تنظیم یک گردش کار بهینه برای استفاده از ویژوال استودیو کد میپردازیم.
ویژوال استودیو کد قابلیتهای داخلی زیادی دارد، اما اگر افزونههای متعدد (و همچنان در حال رشد) آن را نیز در نظر بگیریم، درنهایت هزاران روش برای سفارشیسازی تجربه کاری خود در آن خواهید یافت.
با این که این یکی از نقاط قوت اصلی VS Code محسوب میشود، اما از سوی دیگر میتواند موجب سردرگمی به خصوص برای کاربران تازهکار نیز بشود. در این مقاله قصد داریم این مسائل را روشن بکنیم. همچنین بهترین تکنیکهایی که برای افزایش سرعت و کارایی امور روزمره تا حد امکان مفید هستند معرفی شدهاند.
این مقاله برای دو دسته از افراد به طور خاص مفید است:

VS Code از زمان انتشار در سال 2015 به سرعت جایگاه خود را به عنوان محبوبترین ویرایشگر کد موجود تثبیت کرد. در طی دو سال اخیر، با مراجعه به نتایج روندهای جستجوی گوگل مشاهده میکنیم که علاقه به VS Code (در نمودار زیر به رنگ قرمز) نسبت به همه ویرایشگرهای کد دیگر بیشتر بوده است.

با این که هر ویرایشگر کدی نقاط قوت خاص خود را دارد، اما VS Code به طرز معقولی محبوبترین گزینه است، زیرا قابلیت سفارشیسازی دارد؛ سریعتر بهروزرسانی میشود و نسبت به رقبایش اکوسیستم متنوعتری از افزونهها دارد. در مجموع این قابلیتها به VS Code امکان میدهند که گردش کار بسیار سریعی برای توسعهدهندگان ارائه دهد. در ادامه دلیل این مسئله را به صورت دقیقتری مورد بررسی قرار میدهیم.
اگر تاکنون برخی آموزشهای ویدئویی را در خصوص این IDE تماشا کرده باشید و یا با برخی از همکارانتان کار کرده باشید، احتمالاً با چند مورد از این قابلیتهای VS Code آشنا هستید. در ادامه فهرستی از قابلیتهای اساسی VS Code برای توسعهدهندگان جدی وب ارائه شده است.
اگر میخواهید این نرمافزار را نصب کنید، میتوانید به این آدرس (+) مراجعه کنید.

این میانبرهای مفید به صورت قابلیتهای درونی VSCode ارائه شدهاند و موجب میشوند که نوشتن کدهای HTML و CSS بسیار سریعتر صورت بگیرد.
اگر عبارت html را در هر فایلی تایپ کنید، گزینههای زیادی برای پر کردن دادههای اولیه ضروری در فایل ارائه میشود. با زدن کلیدهای سمت بالا یا پایین میتوانید بین این گزینهها حرکت کنید و سپس با زدن دکمه tab آن میانبر را باز کنید تا چیزی مانند زیر را ببینید:
همچنین میتوانید با زدن کلیدهای Control + SPACE (در ویندوز) یا CMD + SPACE (در macOS) پیش از باز کردن یک گزینه، اطلاعات بیشتری در مورد آن مشاهده کنید.
از طریق دانستن چند اختصار که یادگیری آسانی دارند، میتوان امکان ایجاد سریع تگهای HTML، تعریف کردن ID برای آنها، نامهای کلاس، عناصر همنیا و فرزند را به دست آورد.
برای نمونه اگر بخواهید یک لیست نامرتب با سه مدخل ایجاد کنید که هر کدام یک نام کلاس منحصر به فرد داشته باشند، میتوانید عبارت ul>li.item$*3 را وارد کنید تا چیزی مانند زیر را به دست آورید:
در این مثال، ما از نمادهای اختصاری زیر استفاده کردهایم:
شما میتوانید فهرست کاملی از میانبرهای Emmet را با مراجعه به صفحه مستندات رسمی (+) مشاهده کنید؛ اما سادهترین روش برای شروع به کار استفاده از این تقلب نامه (+) است.
یکی از مفیدترین اختصارهای Emmet برای توسعه وب امکانی برای درج مقدار دلخواهی از متن ساختگی است. برای درج 10 واژه کافی است عبارت lorem100 را وارد کرده و دکمه tab را بزنید. و برای درج 1000 کلمه میتوانید از lorem1000 + tab و همین طور تا آخر استفاده کنید.
اگر از JSX در React یا هر جایگزین دیگر برای HTML استفاده میکنید، همچنان میتوانید از اختصارهای Emmet کمک بگیرید. تنها تفاوت این است که این بار باید آنها را به صورت دستی فعال کنید.
به این منظور باید کلیدهای ترکیبی , + Ctrl را بزنید تا بخش تنظیمات باز شود و سپس روی نماد آکولاد {} در گوشه راست-بالای آن کلیک کنید تا بخش settings.json باز شود. زمانی که باز شد، کافی است کد زیر را اضافه کنید:

VS Code برای صرفهجویی زمان مورد نیاز جهت سوئیچ کردن بین پنجرهها یک ترمینال یکپارچه یا CLI ارائه کرد است. کافی است دکمههای ‘ + CTRL یا ‘ + CMD را بزنید تا آن را باز کنید. با همین دستور میتوانید این ترمینال داخلی را ببندید. این ترمینال به صورت خودکار در همان دایرکتوری که VS Code باز شده است، باز میشود و بدین ترتیب مراحل ناوبری مورد نیاز برای اجرای عملیات در یک ترمینال استاندارد را کاهش میدهد.
این ترمینال کار نصب وابستگیهای NPM یا YRAN، کامیت فایلها به Git، و ارسال فایلها به گیتهاب را آسانتر ساخته است. همچنین هر کار دیگری که میبایست از طریق خط فرمان اجرا شود در این محیط به آسانی صورت میپذیرد.
اگر از سیستم عامل ویندوز استفاده میکنید، به شدت توصیه میشود که Git for Windows (+) را نصب کنید. این ابزار امکان استفاده از برخی دستورها که برای کاربران Mac و Linux آشنا هستند را در اختیار شما قرار میدهد و همچنین با استفاده از آن میتوانید گیت را از خط فرمان اجرا کنید.
زمانی که ابزار فوق نصب شد میتوانید ترمینال پیشفرض را از Powershell به Git Bash تغییر دهید و کد زیر را به فایل settings.json اضافه کنید:

ESLint یک ابزار قدرتمند و محبوب برای linting محسوب میشود که به یافتن خطاها در کد و اصلاح آنها در زمان نوشتن کد کمک میکند و بدین ترتیب میتوانید از رویههای بهینه رایج کدنویسی پیروی کنید. این یک ابزار خطایابی بسیار عالی نیز محسوب میشود، زیرا با بررسی خطاهای ESLint میتوانید بهترین رویههای کدنویسی را بشناسید و دلیل این که چرا این رویهها، بهترین هستند را درک کنید.
میتوان آن را به صورت یک پکیج Node بر مبنای پروژه اضافه کرد و یا این که میتوان از افزونه ESLint درون VS Code استفاده کرد. گزینه دوم آسان و ساده است و موجب نمیشود که از پیکربندیهای یکتای ESLint برای پروژههای بعدی استفاده نکنید. بنابراین افزونه ESLint را یافته و آن را نصب کنید.
برای این که بیشترین بهره را از این افزونه بگیرید، بهتر است از نسخه سراسری کتابخانه ESLint که روی رایانه نصب میشود استفاده کنید. به این منظور باید مطمئن شوید که Node روی سیستم نصب شده است. سپس ترمینال خود را باز کنید (اگر درون VS Code هستید، دکمههای ‘ + CTRL یا ‘ + CMD را بزنید) و کد زیر را وارد کنید:
npm i -g eslint
زمانی که افزونه و کتابخانه سراسری نصب شد، نیازی به اجرای دستور زیر روی تک تک پروژهها نخواهید داشت.
npm i eslint –s
به جای آن میتوانید فایل eslintrc را به دایرکتوری اصلی پروژه خود اضافه کنید.
به این منظور باید NPM را مقداردهی اولیه کنید. ابتدا مطمئن شوید که در دایرکتوری اصلی پروژه خود هستید و در ترمینال عبارت زیر را وارد کنید:
npm init
در ادامه میتوانید فایل eslintrc را با وارد کردن دستور زیر ایجاد کنید:
eslint –init
و در ادامه مراحل مورد نظر را تعقیب کنید. اگر مطمئن نیستید که از کدام «راهنمای سبک» (Style-guide) باید استفاده کنید، پیشنهاد میکنیم از نوع AirBnB’s پیروی کنید.
زمانی که از تنظیمات ESLint راضی بودید، میتوانید مطمئن باشید که اصلاحهای خودکار در زمان ذخیرهسازی و با افزودن دستور زیر به فایل settings.json اعمال میشوند:
به صورت پیشفرض محلهای پایان خطوط در مک و لینوکس از یک فید خط ساده (LF) یعنی n\ استفاده میکنند. اما ویندوز از یک فید (carriage return line (CRLF یعنی r\n\ استفاده میکند.
دو راهحل برای این مسئله وجود دارد. ابتدا میتوانید تنظیمات شکستن خط را از unix به windows تغییر دهید. به این منظور به فایل eslintrc بروید و عبارت “linebreak-style”: “windows” را زیر شیء rules اضافه کنید.
در غیر این صورت اگر فکر میکنید که استفاده از r\n\ ضرورتی ندارد و n\ کفایت میکند و یا به صورت عمده همکارانتان از سیستمهای مک و لینوکس استفاده میکنند، میتوانید رفتار پیشفرض شکستن خط را به LF تغییر دهید و کد زیر را به فایل settings.json اضافه کنید:

Prettier یک ابزار قالببندی کد است. این ابزار سبکهای قالببندی معینی را به عنوان سبک صحیح توصیف میکند؛ اما محبوبیت آن موجب شده است که قواعد آن به یک استاندارد تثبیتشده برای جاوا اسکریپت، CSS و تعداد فزایندهای از زبانهای دیگر تبدیل شود.
یک همپوشانی بین Prettier و ESLint وجود دارد؛ اما در نهایت Prettier تمرکز بیشتری روی یافتن خطاها دارد و Prettier بیشتر بر اصلاح قالببندی کد متمرکز شده است. این دو با یکدیگر همکاری میکنند و نوعی یکپارچهسازی برای کمک به اجرای روانتر کارها تا حد ممکن دارند.
افزونهای که باید نصب کنیم Prettier — Code formatter نوشته Esben Peterson است. برای فعالسازی یکپارچهسازی ESLint کد زیر را به فایل settings.json اضافه کنید:
زمانی که این افزونه نصب شد، میتوانید با زدن دکمههای ترکیبی Shift + Alt+ F (در ویندوز) و یا Shift + Option + F (در مک) موجب شوید که Prettier بیدرنگ کدهای جاوا اسکریپت و CSS را قالببندی کند.
یک گزینه مناسب این است که افزونه را طوری تنظیم کنیم که در زمان ذخیرهسازی فایل به صورت خودکار کدها را قالببندی کند. به این منظور باید دستور زیر را به فایل settings.json اضافه کنید:
از Prettier میتوان برای قالببندی زبانهای دیگر به جز جاوا اسکریپت و CSS نیز استفاده کرد. این افزونه فهرست رو به رشدی از زبانها را پشتیبانی میکند که شامل جاوا، روبی و PHP میشود. البته این موارد به صورت آماده نصب نمیشوند و باید آنها را به صورت مستقل نصب کنید.

قابلیت ویرایش چند کرسری میتواند موجب صرفهجویی زیادی در زمان بشود. برای استفاده از این امکان به روشی کارآمدتر باید چند دستور را به خاطر بسپارید؛ اما جای نگرانی نیست، زیرا آنها به سرعت ملکه ذهن شما میشوند.
برای افزودن دستی کرسرهای جدید، کلید Alt یا Option را نگه دارید و سپس هر جایی که میخواهید کرسر قرار گیرد، کلیک کنید. هر زمان با زدن دکمه Esc میتوانید به حالت تک کرسری بازگردید. صرفاً با استفاده از همین دو دستور میتوانید مقدار زیادی در زمان خود صرفهجویی کنید؛ اما موارد دیگری نیز وجود دارند.
با نگه داشتن کلیدهای Shift + Alt یا Shift + Option در زمان کشیدن ماوس، یک کرسر جدید به انتهای هر خط انتخاب شده اضافه میشود.
برای افزودن یک کرسر جدید، درست بالای مکان فعلی کرسر میتوانید کلیدهای Ctrl + Alt یا CMD + Option را بزنید و سپس از کلیدهای جهتی بالا یا پایین استفاده کنید.
با انتخاب یک بخش از کد و سپس زدن کلیدهای Ctrl + Shift + L یا CMD + Shift+ L میتوانید بیدرنگ یک کرسر جدید در انتهای هر بخش کد با همان میزان تورفتگی ایجاد میشود.
در مواردی که نخواهید همه کدهای یکسان انتخاب شوند، می تونید از کلیدهای Ctrl + D یا CMD + D برای هایلایت کردن متن تورفته به صورت یک به یک استفاده کنید.
اگر به مجموعه کلیدهای ترکیبی یک ویرایشگر متن دیگر عادت داشته باشید، این امکان وجود دارد که از آن ترکیبها استفاده کنید. در واقع به جای این که وقت خود را صرف یادگیری مجموعه جدیدی از کلیدهای ترکیبی بکنید، میتوانید با مراجعه به مسیر Preferences > Keymaps فهرستی از اکستنشنهای مرتبط را ببینید.
دقت کنید که بسیاری از کلیدهای میانبر توصیفشده در این مقاله در زمان نصب keymap جدید ممکن است به هم بریزند. اگر میخواهید دوباره به حالت پیشفرض بازگردید، کافی است اکستنشنهای مرتبط را یافته و غیرفعال کنید.

در اغلب موارد ما تمایل نداریم که متنی که میبینیم از بخش قابل رؤیت صفحه خارج شود تا مجبور نباشیم از اسکرول افقی که چندان هم آسان نیست استفاده کنیم. برای فعال یا غیرفعال کردن امکان شکستن خطوط بر مبنای هر فایل مستقل کافی است کلیدهای Alt + Z را بزنید.
همچنین اگر نمیخواهید هیچ وقت امکان شکستن خطوط غیرفعال شود، میتوانید آن را به صورت رفتار پیشفرض تنظیم کنید. به این منظور درون فایل settings.json کد زیر را اضافه کنید تا همه متون به صورت پیشفرض شکسته شوند:
چندین گزینه عالی برای اجرا و دیباگ کردن کدهای جاوا اسکریپت درون ویژوال استودیو کد وجود دارد که در ادامه آنها را یک به یک توضیح میدهیم:

Quokka یک ابزار رایگان است که به ما کمک میکند در هر لحظه از اتفاقهایی که در کد جاوا اسکریپت رخ میدهد اطلاع پیدا کنیم. این ابزار خود را به صورت «چک نویس زنده» توصیف کرده و یک راهنمایی بصری ارائه میکند تا ببینیم آیا کد کاری که قرار بوده انجام دهد را انجام میدهد یا نه.
زمانی که آن را نصب کنید با زدن کلیدهای CTRL + K + Q یا CMD + K + Q میتوانید آن را روی فایل موجود جاوا اسکریپت اجرا یا ریاستارت کنید.

بهترین گزینه برای دیباگ کردن کدهای جاوا اسکریپت درون VS Code، اکستنشن خود مایکروسافت به نام «Debugger for Chrome» است. البته طرز کار آن ممکن است کمی پیچیده باشد و از این رو توصیه میکنیم به صفحه مستندات رسمی (+) آن مراجعه کنید تا موارد بیشتری را در خصوص آن بیاموزید. این اکستنشن یک ابزار قدرتمند است و امکاناتی که ارائه میکند بسیار فراتر از ()comsole.log است.

اگر گزینههای فوق برای شما پیچیده هستند و ترجیح میدهید که به روشی ساده قطعه کدها یا فایلهای خود را اجرا کنید، توصیه میکنیم که اکستنشن Code Runner را که تألیف Jun Han است بررسی کنید. این اکستنشن زبانهای زیادی را پوشش میدهد و با یک دستور ساده (Ctrl + Alt + N یا CMD + Option + N) میتوانید خروجی کد خود را در انتهای صفحه ملاحظه کنید. در مورد جاوا اسکریپت رفتار این افزونه شبیه به یک کنسول مرورگر ادغام شده درون VS Code است.
قابلیتهایی که در این مقاله معرفی شدند برای هر محیط توسعه وب کاملاً مفید هستند و امیدواریم موجب شوند که گردش کار VS Code شما تا حد امکان سریعتر شود و یا اگر مبتدی هستید بتوانید آغاز قدرتمندی در استفاده از این IDE محبوب داشته باشید.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
منبع: فرادرس
همه توسعهدهندگان وب به سرعت این واقعیت دردناک را درمییابند که وب جای خشنی برای آنها محسوب میشود و بدترین مورد هم مرورگرهای قدیمی هستند. باید پذیرفت که وقتی از مرورگرهای قدیمی صحبت میکنیم در عمل نسخههای قدیمی اینترنت اکسپلورر را در نظر داریم، اما تعداد آنها بسیار بیشتر از این است. یک نسخه یک سال پیش فایرفاکس هم مرورگری قدیمی محسوب میشود. همچنین در دنیای موبایل که نه سیستم عامل و نه مرورگر نمیتوانند بهروزرسانی شوند، این مشکل تشدید میشود. بسیاری از گوشیهای اندروید و یا آیفون وجود دارند که مرورگرهای اولیه خودشان را حفظ کردهاند و هرگز بهروزرسانی نشدهاند. اینها نیز مرورگرهای قدیمی محسوب میشوند. در این مقاله به بررسی روش کار با فرمهای HTML در مرورگرهای قدیمی میپردازیم.
برای مطالعه بخش قبلی این سری مطالب آموزشی روی لینک زیر کلیک کنید:
متأسفانه مواجهه با این واقعیتها نیز بخشی از کار برنامهنویسی وب به حساب میآید. اما خوشبختانه چند ترفند وجود دارند که میتوانند به حل حدود 80 درصد از مشکلاتی ناشی از مرورگرهای قدیمی کمک کنند.
اساساً مهمترین نکته در زمان مواجهه با این مشکل، خواندن مستندات آن مرورگرهای قدیمی و تلاش برای درک الگوهای رایج است. برای نمونه در اغلب موارد پشتیبانی از CSS بزرگترین مشکل در فرمهای HTML محسوب میشود. بنابراین بهترین نقطه شروع همینجا است. کافی است پشتیبانی از عناصر (یا اینترفیس DOM) که میخواهید استفاده کنید را مورد بررسی قرار دهید. وبسایت MDN جدول سازگاری را برای اغلب عناصر، مشخصهها و API-هایی که میتوان در صفحههای وب مورد استفاده قرار ارائه کرده است. اما منابع دیگری نیز وجود دارند که میتوانند مفید واقع شوند و در ادامه به معرفی آنها میپردازیم.
از آنجا که فرمهای HTML شامل تعاملهای پیچیدهای هستند، یک قاعده ساده سرانگشتی در مورد آنها وجود دارد: تلاش کنید همه چیز را ساده حفظ کنید. موارد زیادی وجود دارند که میخواهیم فرمها «زیباتر» یا «با کارکردهای پیچیدهتر» باشند، اما ساخت فرمهای HTML کارآمد به طراحی یا کارکرد ربطی ندارد.
«تنزل مطبوع» (Graceful degradation) و «بهبود پیشرونده» (progressive enhancement) دو الگوی توسعه هستند که امکان ساخت محصولاتی عالی و همزمان پشتیبانی از طیف وسیعی از مرورگرها را فراهم میسازند. زمانی که چیزی را برای یک مرورگر مدرن میسازید و میخواهید مطمئن باشید که روی مرورگرهای قدیمی هم به هر حال به طریقی حتماً کار خواهد کرد در واقع از روش تنزل مطبوع استفاده میکنید. در ادامه چند نمونه از این مفهوم را در ارتباط با فرمهای HTML بررسی میکنیم.
انواع ورودی جدید ارائه شده از سوی HTML5 بسیار جالب هستند، زیرا روش تنزل آنها کاملاً قابل پیشبینی است. اگر مرورگری مقدار خصوصیت type یک عنصر <input> را نداند، به مقدار text بازمیگردد.
| Chrome 24 | Firefox 18 |
|---|---|
سلکتورهای خصوصیت CSS در فرمهای HTML بسیار مفید هستند، اما برخی مرورگرهای قدیمی از آنها پشتیبانی نمیکنند. در این حالت میتوان از یک کلاس معادل برای حل این مشکل استفاده کرد:
توجه کنید که کد زیر بیفایده است (زیرا تکراری است) و ممکن است در برخی مرورگرها کار نکند:
دو روش برای تعریف دکمهها در فرمهای HTML وجود دارد:
عنصر <input> در صورتی که بخواهید نوعی CSS را با استفاده از سلکتورهای عنصر روی آن اعمال کند، میتواند موجب دشواریهایی شود.
عنصر <button> از دو مشکل احتمالی رنج میبرد:
انتخاب هر کدام از راهحلهای فوق بر مبنای محدودیتهای پروژه به عهده شما است.
بزرگترین مشکل فرمهای HTML در مرورگرهای قدیمی، بحث پشتیبانی از CSS است. در چنین مواردی حتی اگر امکان اعمال نوعی تغییر روی عناصر متن (مانند تغییر اندازه یا رنگ) وجود داشته باشد، همواره عوارض ناخواستهای وجود خواهد داشت. در این موارد بهترین رویکرد این است که کلاً از خیر استایلدهی به ویجتهای فرم HTML بگذرید. با این حال همچنان میتوان استایل ها را روی همه آیتمهای پیرامونی اعمال کرد. اگر یک فرد حرفهای باشید و مشتری از شما بخواهد، میتوانید در این حالت برخی تکنیکهای دشوار مانند ساخت مجدد ویجتها با جاوا اسکریپت را انجام دهید.
با این که جاوا اسکریپت یک فناوری جالب در مرورگرهای مدرن محسوب میشود، اما مرورگرهای قدیمی مشکلات زیادی با آن دارند.
یکی از بزرگترین مشکلها، دسترسی به API-ها است. به همین دلیل کار با جاوا اسکریپت «غیر مزاحم» (unobtrusive) بهترین رویه در نظر گرفته میشود. این یک الگوی توسعه است که دو الزام را تعریف میکند:
مفهوم جاوا اسکریپت «غیر مزاحم» که در ابتدا از سوی پیتر پاول کخ برای Dev.Opera.com عرضه شده است ( و اینک به Docs.WebPlatform.org انتقال یافته است) این ایدهها را به خوبی توضیح میدهد.
موارد زیادی وجود دارند که polyfill مناسب تا حدود زیادی میتواند به ارائه یک API مفقود کمک کند. یک polyfill نوعی کد جاوا اسکریپت است که موارد نقص کارکردهای مرورگرهای قدیمی را جبران میکند. با این که میتوان از آن برای بهبود پشتیبانی هر نوع کارکردی استفاده کرد، استفاده از آنها برای جاوا اسکریپت نسبت به CSS یا HTML ریسک کمتری دارد. موارد زیادی وجود دارند که جاوا اسکریپت ممکن است (به دلیل مشکلات شبکه، تعارض اسکریپت و غیره) از کار بیفتد. اما برای جاوا اسکریپت اگر با ذهنیت جاوا اسکریپت غیر مزاحم کار کنیم، در صورت فقدان polyfill نیز مشکل مهمی به حساب نمیآید.
بهترین روش برای polyfill کردن API مفقود، استفاده از کتابخانه Modernizr و پروژه جانبی آن YepNope است. Modernizr کتابخانهای است که امکان تست وجود کارکرد را میدهد تا بر اساس آن عمل کنید. YepNope یک کتابخانه بارگذاری شرطی است. به مثال زیر توجه کنید:
تیم Modernizr لیستی از polyfill-های عالی را به سادگی نگهداری میکند.
نکته: Modernizr قابلیتهای مدرن دیگری نیز دارد که امکان کار با جاوا اسکریپت غیر مزاحم و تکنیکهای تنزل مطبوع را میدهد. برای کسب اطلاعات بیشتر به مستندات Modernizr (+) مراجعه کنید.
با این که اسکریپتهایی مانند Modernizr در مورد عملکرد بسیار آگاهانه عمل میکنند، بارگذاری یک پلیفیل 200 کیلوبایتی میتواند بر عملکرد اپلیکیشن تأثیر بگذارد. این وضعیت به طور خاص در مورد مرورگرهای قدیمی صدق میکند، چون بسیاری از آنها موتور جاوا اسکریپت کُندی دارند که میتواند اجرای همه پلیفیل ها را برای کاربر زجرآور کند. عملکرد نیز برای خود موضوع مهمی محسوب میشود، اما مرورگرهای قدیمی بسیار حساس هستند، چون کند هستند و هر چه از پلیفیل های زیادی استفاده کنید، کد جاوا اسکریپت بیشتری باید پردازش شود. بنابراین دشواری آنها نسبت به مرورگرهای مدرنتر دو برابر است. شما باید کد خود را روی مرورگرهای قدیمی تست کنید تا ببینید عملکرد آنها چگونه است. برخی اوقات از دست رفتن برخی کارکردها منجر به تجربه کاربری بهتری نسبت به داشتن دقیق همان کارکرد در همه مرورگرها میشود. به عنوان آخرین یادآوری باید اشاره کنیم که همواره باید کاربر نهایی را در نظر داشته باشید.
چنان که در این مقاله دیدیم، سر و کار داشتن با مرورگرهای قدیمی تنها محدود به فرمها نمیشود. با این که مجموعه کاملی از تکنیکها برای کار با مرورگرهای قدیمی وجود دارد، اما یادگیری همه آنها فراتر از حیطه این مقاله است.
منبع: فرادرس
اغلب توسعهدهندگان به سهولت استفاده و توسعه سریع NodeJS به همراه وبسرور اکسپرس علاقهمند هستند، اما در مورد مقیاسپذیری و «امنیت نوع» (type-safety) مورد نیاز برای اپلیکیشنهای بزرگ دغدغه دارند. اما جای نگرانی نیست زیرا تایپاسکریپت به کمک شما میآید. در این شرایط همچنان از مزیت یک زبان اسکریپتنویسی بهرهمند هستید و همزمان از پایداری یک زبان استاتیک مانند سی شارپ یا جاوا نیز استفاده میکنید. یادگیری تایپاسکریپت در صورتی که قبلاً با جاوا اسکریپت آشنا باشید کار آسانی است و پیکربندی آن تنها به یک گام اضافی نیاز دارد. باید اشاره کنیم که مقالاتی وجود دارند که شیوه استفاده از اکسپرس و تایپ اسکریپت را نمایش میدهند، اما این مقالات یا زمان زیادی را صرف صحبت در مورد دلیل استفاده از تایپاسکریپت میکنند و یا روی راهاندازی اکسپرس به روشی شیءگرا تأکید ندارند. نقطه تمرکز این مقاله نمایش بهترین و سادهترین پیکربندی برای تایپاسکریپت جهت توسعه NodeJs/Express است.
ما در زمان توسعه میتوانیم کد تایپاسکریپت خودمان را مستقیماً از فایلهای ts. که ایجاد کردهایم اجرا کنیم. با این حال در فاز پروداکشن باید آنها را به جاوا اسکریپت transile کنیم تا سرور ما بتواند مستقیماً از NodeJS اجرا کند. برای پیکربندی شیوه transpile شدن کد تایپاسکریپت و برای تعیین قواعد استایلبندی کد باید به ترتیب فایلهای tsconfig.json و tslint.json را ایجاد کنیم. استفاده از tslint الزامی نیست، اما برای اجرای دقیق استانداردهای کدنویسی بسیار کارآمد است و منجر به تولید کد تمیزتری در بلندمدت میشود.
یک پوشه جدید برای پروژهتان بسازید و در ریشه آن tsconfig.json را با محتوای زیر اضافه کنید:
به گزینه exclude در خط 23 توجه کنید که /src/public/ را نشان میدهد. ما قصد نداریم در این راهنما به بررسی بخش فرانتاند بپردازیم، اما زمانی که خواستید محتوای فرانتاند را نیز اضافه کنید، میتوانید در اینجا انجام دهید.
اکنون باید کد زیر را به فایل tslint.json اضافه کنیم. ما از تنظیمات پیشنهادی با چند تغییر کوچک استفاده میکنیم. شما میتوانید در صورت نیاز هر کدام از این تنظیمات را تغییر دهید.
برای این که بتوانیم کدی را اجرا کنیم باید یک اسکریپت آغازین ایجاد کنیم که سرور ما را بوت کند. از آنجا که هنوز سروری نداریم فعلاً از آن میخواهیم که صرفاً عبارت “hello world” را نمایش دهد. پوشه و فایل src/start.ts را ایجاد کرده و دو خط کد زیر را به آن اضافه کنید:
نکته: tslint غیرفعال شده است، زیرا ما را ملزم میکند که از ()console.log استفاده نکنیم و رها کردن آن در این وضعیت در فاز پروداکشن کار خوبی محسوب نمیشود.
در سوی دیگر نمیخواهیم زمانی که کدی را تغییر دادیم، مجبور باشیم همه چیز را به صورت دستی ریاستارت کنیم، بنابراین از nodemon برای رصد تغییرات در فایلهای خود استفاده میکنیم و بدین ترتیب اسکریپت آغازین خود را مجدداً اجرا میکنیم.
اینک ما همه مواردی که برای آغاز توسعه به زبان تایپاسکریپت نیاز داشتیم گرد هم آوردهایم، کافی است وابستگیها را نصب کنیم. اگر هنوز دستور زیر را اجرا نکردهاید، آن را هم اینک اجرا کنید:
npm init
بدین ترتیب پروژه شما به یک پکیج npm تبدیل میشود و سپس میتوانید کتابخانههای npm زیر را نصب کنید:
npm i -D ts-node nodemon typescript tslint
بنابراین اکنون میتوانیم موارد مختلف را با سهولت بیشتر کدنویسی بکنیم و دیگر لازم نیست هر بار دستهای از دستورهای طولانی در کنسول وارد کنیم. یک اسکریپت به package.json اضافه میکنیم تا اسکریپت آغازین را از طریق nodemon و با ts-node اجرا کند.
اکنون اگر دستور npm run start-dev را اجرا کنید، باید خروجی hello world را در کنسول مشاهده کنید.
اکنون که تایپاسکریپت آماده شده و به خوبی اجرا میشود، نوبت آن رسیده که یک وبسرور ساده ExpressJS و چند مسیر ایجاد کنیم. ما میتوانستیم مستقیماً از ExpressJS استفاده کنیم، اما در این صورت از مزیت تایپاسکریپت بهرهمند نمیشدیم. بهتر است که کلاسهایی را با متدها بسازیم، تا این که مجبور باشیم چیزی مانند عبارت زیر را وارد کنیم و آن را بارها و بارها تکرار کنیم:
برای این که به الگوی MVC وفادار مانده و از برنامهنویسی به سبک شیءگرا استفاده کنید، پیشنهاد میکنیم از OvernightJS بهره بگیرید تا کنترلرها و دکوراتورهای مسیر را به اکسپرس اضافه کنید. شاید بگویید فریمورکهایی مانند NestJS و ts-express-decorators وجود دارند که مسیرهای اکسپرس را دکوراته میکنند، اما همه اینها فریمورکهای بزرگی هستند که وبسایتهای کاملی به مستندات آنها اختصاص یافته است. Overnight (+) صرفاً یک مجموعه کوچک و سادهای از کتابخانهها است که برای افزودن دکوراتورها به اکسپرس و چند چیز دیگر کاربرد دارد. بدین ترتیب یک لایه تجرید روی اکسپرس ایجاد نمیکند و در صورتی که از قبل با اکسپرس آشنا باشید، میتوانید آن را در حدود 10 دقیقه بیاموزید.
در ادامه اکسپرس و Overnight را نصب کرده و یک وبسرور را راهاندازی میکنیم:
npm i -s express body-parser @overnightjs/core @overnightjs/logger npm i -D @types/node @types/express
پکیج body-parser نیز به منظور فراهم ساختن امکان ارسال دادهها به صورت JSON استفاده میشود.
در دایرکتوری src/ یک فایل برای سرور مثلاً به نام ExampleServer.ts ایجاد کرده و یک کلاس با همان نام ایجاد کنید. سپس پوشه/فایل controllers/ExampleController.ts را اضافه کنید. ما ابتدا کنترلر را پیادهسازی کرده و سپس آن را در فایل سرور خود ایمپورت میکنیم.
محتوای زیر را به فایل کنترلر اضافه کنید:
توجه کنید که ما یک متد برای هر مسیر ایجاد کردیم تا همه آنها را در عمل ببینیم. کلاس Logger نیز کارآمد است، زیرا میتواند برای پرینت در یک فایل یا در کنسول استفاده شود، همچنین میتواند کلاً خاموش شود یا بسته به محیط سرور کار خاصی انجام دهد.
زمانی که کار شما با کنترلر به پایان رسید، باید مطمئن شوید که فایل index.ts را با خط زیر به controllers/ اضافه کردهاید:
به این ترتیب فایلهای کنترلر جدید ایجاد شده در آینده میتوانند به سادگی صرفاً با افزودن یک خط کد اضافه شوند.
در سرور کنترلرها را ایمپورت کرده و کلاس را با اکسپورت Server مربوط به Overnight بسط دهید. با بسط دادن Server به وهلهای از اکسپرس با this.app دسترسی مییابید که میتوانید با آن دقیقاً همانند هر وهله نرمال دیگر اکسپرس که با دستور زیر ساخته شده است تعامل پیدا کنید:
کنترلرها باید وهلهسازی شده و به صورت مدخلی به (…)super.addControllers اضافه شوند تا مسیرهایتان فعال شوند. مطمئن شوید که کنترلهایتان را پس از تنظیم میانافزار اما قبل از آغاز به کار سرور اضافه کردهاید.
اکنون که سرور و کنترلرهای خود را در اختیار داریم، باید همه چیز را از اسکریپت آغازین بوت کنیم. به این منظور سرور را ایمپورت، آن را وهلهسازی و سپس start(portNumber) را فراخوانی کنید:
زمانی که دیدید عبارت زیر در کنسول نمایش یافته است:
میتوانید یک ابزار فراخوانی API (مانند Postman) را باز کرده و درخواستهایی به سرور ارسال کنید. اگر از دستورهای این راهنما به طور کامل پیروی کرده باشید، اینک باید ببینید که بخش msg: مسیرها در کنسول نمایش مییابند.
اکنون که یک سرور توسعه کاملاً عملیاتی را راهاندازی و اجرا کردهایم، تنها چیزی که نیاز داریم این است که آن را برای پروداکشن آماده کنیم. در حالتی که فایلهای ts. را در زمان توسعه حذف کرده باشید باید هر بار که traspile میکنید، پوشه build/ را پاک کنید، چون در غیر این صورت با فایلهای ts. باطلی رو به رو میشوید.
برای آغاز کدنویسی پروداکشن باید به جای src/start.ts دستور build/start.js را اجرا کنید. در ادامه دو مسیر دیگر به package.json اضافه میکنیم تا کد پروداکشن را ساخته و اجرا کنیم. دستور tsc کد ما را transpile میکند:
زمانی که سرور آغاز شد، همه مسیرها باید دقیقاً همانند قبل عمل کنند. بدین ترتیب به پایان این راهنما با موضوع راهاندازی اکسپرس و تایپاسکریپت میرسیم.
منبع: فرادرس