رستگاری با کافی

سورس کافی در گیتهاب ممکنه خیلیا وقتی این نوشته رو میخونن با نود کار کرده باشن، و چون احتمال کار کردنتون با نود زیاده، پس ممکنه با نودکانفیگ کار کرده باشین، اگه هم کار نکرده باشین اجازه بدین بحث رو روشن کنم.خیلیا وقته نیازه یه سری متغیر خارجی مثل پورت فایل سرورمون یا سکرت کد پسورد کاربرارو (یا یه سری متغیر ثابت داینامیک دیگه ?‌ ) تعریف کنیم، نکته جالب اینجاست که ما قرار نیست توی کامندلاین چندبار اون هارو تغییر بدیم یا اینکه توی سورس پروژمون درگیر این چیزا بشیم. واسه همینه که واسه محیط عظیمی مثل نود جی اس چیزی به اسم نودکانفیگ ساخته شده و کار مارو اسون کرده.حالا من اینجا بیشتر تبلیغ نود و نود کانفیگ رو کردم تا اصل موضوع، خلاصه اینه که داداش نود مدتیه بدنیا اومده که اسمشو دینو گذاشتن.اولین حمایت مادران از برنامه نویس ها: کاردستی لوگو دینو از طرف مادر سازنده دینو و نود (ریان دال)با بدنیا اومدن دینو،‌ خیلیا دارن پکیجای بی نظیر نود رو بازتوسعه میدن برای دینو، یکی از اینا علی حسنیه.یه روزی یه پیام تو گروه ایران دینو داد و گفت که پکیجی به اسم coffee رو دارم برای دینو توسعه میدم و بعد از اون اقا عرفان و من شروع کردیم به کمک توی توسعه، امیدوارم شما هم بیاید و کمک کنید که تازه ورژن یک این پروژه منتشر شده. خلاصه داستان تعریف کردن بسه و بریم سراغ کار کردن با coffee.شروعاز اونجایی که موجودی به اسم تایپ اسکریپت کاملا روی دینو ساپورت میشه، پس با تایپ اسکریپت میریم جلو. اول یه فایل کانفیگ با نام default.json یا default.yml میسازیم و توی یه فولدر به اسم کافیگ قرار میدیم (اولویت با فایل های .json هست) و همچین محتویات زیر رو میریزیم داخل اون فایل ( یا هر محتویات دلخواه دیگه ) // default.json { &quotdatabase&quot: { &quotname&quot: &quotmy-db-name&quot, } }getحالا توی فایل دینویی که میخوایم اجرا کنیم، کافی رو ایمپورت میکنیم.‌ خوب روش برگردوندن مقدار name که استرینگ my-db-name هست رو نگا کنید:import coffee from &quothttps://deno.land/x/coffee/mod.ts&quot const dbName: string = coffee.get(&quotdatabase.name&quot).string(); // my-db-nameخب،‌ نکته اینجاست که توی حالت دیفالت کافی، میاد دنبال دایرکتوری کانفیگ میگرده بعدش اگه پیداش کرد میره سراغ فایل default، بعدش میاد لقمه رو واستون اماده میکنه.خب اینجا از متود get استفاده میکنیم،‌ که الگوی اون دقیقا همینطوری که هست ینی اول میره سراغ ابجکت database بعدش میره سراغ name بعدش لقمه رو که اماده کرد بستگی به شما داره که با چه متودی اون لقمه رو بخورین البته متود خوبی رو انتخاب کنید که ارور میل نکنید.هر چی شما ابجکتتون طولانی تر باشه توجه کنید که ادرستون طولانی تر باشه ینی این نیست که فقط name بنویسید و واستون مقدار رو برگردونهنکته ای که توی کافی قابل توجه هستش اینه که خیلی به تایپ اسکریپت رفته و بهت اجازه نمیده الکی تایپ هارو توی ماستا بریزی، بخاطر همین متود استرینگ رو گزاشتم.تایپ های موجود (به صورت متود):string()boolean()number()اگه هم تکلیف تایپتون معین نبود کافیه به جای این متود ها یه پراپرتی value بزارید (متود نیست و پرانتز نزارید) تایپ های بعدی هم توی اپدیتای بعدی متولد میشن.قدم بعدیhasحالا اگه بخوایم یه پراپرتی یا مقداری اصا وجود داره از متود has به جای get استفاده میکنیم:coffee.has(&quotdatabase.host&quot); // false coffee.has(&quotdatabase.name&quot); // trueواسه خط اول میره سراغ ابجکت دیتابیس توی فایل کانفیگ قبلی و چک میکنه ایا پراپرتی host وجود داره ( که البته نیست و false برمیگردونه)، واسه خط بعدی هم همینه ولی true برمیگردونه چونکه ما پراپرتی name رو داریم. setحالا توی مثال قبلی که پراپرتی host نبود ما خودمون میتونیم از طریق خود کافی ایجادش کنیم coffee.set(&quotdatabase.host&quot , &quot127.0.0.1&quot); coffee.has(&quotrequests.host&quot); // trueقدم اخردیدین گاهی اوقات یه متغیر هست که توی نود تعیین میکنه که الان توی مرحله پروداکشن یا دولوپمنتیم، حالا اگه بخوایم همچین متغیری رو توی کافی استفاده کنیم، کافیه یه فایلی به اسم custom-environment-variables توی همون دایرکتوری کانفیگ بزاریم،‌ و محتویاتش رو اینگونه بزاریم: // custom-environment-variables { &quotdatabase&quot: { &quotpassword&quot: &quotDB_PASSWORD&quot, } }اسم این فایل به طور خودکار برای کافی تعریف شده به همین خاطر این اسم رو گزاشتیم.حالا اگه این لاین رو ران کنیم:let dbPassword: number = coffee.get('database.password').number(); // DB_PASSWORD environment variable حالا ما توی اجرا برای اینکه DB_PASSWORD رو تعریف کنیم (یکی از راه ها رو میگم) اینطوری کامند رو مینویسیم: DB_PASSWORD=123 deno run --allow-all coffee.ts پس کافی از طریق custom-environment-variables اینطوری متوجه همچین متغیرهایی میشه، حالا ما انتظار اینو داریم که انوایرونمنت وریبلی که به عنوان DB_PASSWORD تعریف کردیم مقدارش رو 123 برگردونه.ویرایش کانفیگ دیفالتحالا اگه بخوایم مسیر فولدر کانفیگ رو تغییر بدیم کافیه از متود load استفاده کنیم:coffee.load({ configDir: &quot./custom&quot, customEnvVarFileName: &quotcev&quot, env: &quotproduction&quot });حالا از این به بعد کافی فایل های مثلا default.json یا default.yml رو از custom میخونه و همچنین cev.json یا cev.yml به عنوان فایل اینوایرونمنت وریبل هاست.کافی در هرصورت default فایل رو میخونه بعد اگه DENO_ENV تعریف شده بود میره فایل اون رو میخونه مثلا اگه production بود میره production.json یا .yml رو میخونه اما اگه env ایی که توی کد بالا هست رو بنویسیم، کافی دیگه بیخیال DENO_ENV میشه و فایل env رو میخونه ( البته باید بدون پسوند مقدار رو بزاریم).امیدوارم لذت کافی رو برده باشین از این مقاله،‌ همچنین علاوه بر مسواک زدن،‌ deno رو دنو تلفظ نکنید، بلکه دینو تلفظ کنید، نکته اخر اینه که از کافی به خوبی استفاده کنید:)بخشی از سکانس های خفن فیلم breaking bad