sajjadmrx
sajjadmrx
خواندن ۲ دقیقه·۲ سال پیش

روتینگ تمیز تر express در تایپ اسکریپت!


خب. این اولین نوشته منه و امیدوارم که خوشتون بیاد :)

میخام تو اولین پست ام یه پکیج رو معرفی کنم و البته خودم نوشتمش.

داشتم در مورد دکوریتورها میخوندم و تمرین میکردم که یهو همچین ایده‎‌ی به ذهنم خورد.

خب پیچیدگی روتینگ در express بر هیچکس پوشیده نیست!. اما میتونیم با دکوریتورها یه کار خفن و تمیز بکنیم.

چرا از NestJs استفاده نکنیم؟

نست فوق العادس! اما گاهی اوقات ما میخوایم خارج از ساختار نست یا انقد پروژه بزرگ نیست که خودمون رو درگیر با NestJs بکنیم. پروژه رو پیش ببریم

نصب و کانفیگ پکیج(لایبری)

خب مثل همه پکیج ها ما باید پکیج رو با دستور زیر نصب کنیم:

npm install easy-express-router

بعد باید قابلیت استفاده از دکوریتور ها و متادیتا رو در فایل کانفیگ typescript فعال کنیم. با اضافه کردن اینا:

{ &quotexperimentalDecorators&quot: true, &quotemitDecoratorMetadata&quot: true, }

نصب و کانفیگ تموم شد. و ما میتونیم از پکیج استفاده کنیم ( همانطور که در بالا گفتم فقط در تایپ اسکریپت میشه استفاده کرد )

نحوه استفاده از پکیج

به عنوان مثال من یه todo app خیلی ساده دارم که دو فایل اصلی تایپ اسکریپت داره یکی server.ts همانجور که از اسمش معلوم هست فایل اصلی ماست. و todos.controller.ts فایلی هست که ما استفاده از دکوریتورها و پکیج easy-express-router اندپوینت های todo رو مینویسیم:

ساختاره پروژه
ساختاره پروژه

خب اولین کاری که میکنیم میاییم و اولین کنترلرمون (todos.controller.ts) رو به این صورت مینویسیم:

در دکوریتور Controller ما پرفیکس رو ست کردیم تا روی همه اندپوینت هامون در کلاس ست(اعمال) بشه.

و در کلاس واسه هر متدی یه دکوریتور تعریف کردیم و هروقت این اندپوینت ها بهشون ریکوئست زده بشه متدها کال میشن

و در مرحله بعد ما باید کنترلرمون رو به easyRouter اضافه کنیم( ارایه هست ) و اونارو به express معرفی کنیم:

فایل  server.ts
فایل server.ts

در EasyRouter.setController ما لیستی از کنترلرهامون رو میتونیم به ایزی روتر اضافه کنیم

و EasyRouter.initController اونارو به express به عبارتی معرفی کنیم با استفاده از app.use

به همین سادگی و تمیزی ! :)

نحوه استفاده از میدلورها

ما دو روش داریم واسه استفاده از میدلورها:

  • میدلور رو واسه همه اندپوینت های یک کلاس ست کنیم
  • فقط واسه یک اندپوینت

در مرحله اول ما میخایم میدلور auth مون رو واسه همه اندپوینت ها استفاده کنیم:

ما میتونیم لیستی از میدلورها داشته باشید و همانطور که مشخصه اولیت بر اساس جایگاه میدلور در ارایه هستش.

و حالا میخایم یه میدلور برای چک کردن رول کاربر واسه اندپوینت / POST داشته باشیم :

خب اینجور ریکوئستی که واسه اندپوینت / POST میاد به این صورت پردازش میشه:

POST domin.com/todos

  • میدلور auth پردازش میشه
  • میدلور checkRole پردازش میشه
  • متد create کال میشه. و در صورتی که چیزی رو return کنه به صورت خودکار به کلاینت ریسپانس داده میشه ( یا مستقیم میتونید با استفاده از متدهای res استفاده کنید )

گیت هاب:

https://github.com/sajjadmrx/easy-express-router

پکیج منیجر npm:

https://www.npmjs.com/package/easy-express-router

خوش حال میشم به توسعه این پکیج کمک کنید ??

تایپ اسکریپتروتینگexpressnestjs
سعی میکنم چیزای که بلدم رو به اشتراک بذارم.
شاید از این پست‌ها خوشتان بیاید