Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

青灯夜游
Lepaskan: 2022-03-21 20:12:57
ke hadapan
2729 orang telah melayarinya

Artikel ini akan membawa anda melalui seni bina AOP Node rangka kerja belakang Nest.js dan memperkenalkan manfaat seni bina AOP Nest.js saya harap ia akan membantu semua orang.

Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Nest.js ialah rangka kerja bahagian belakang Nodejs Ia merangkum platform http ekspres dan lain untuk menyelesaikan masalah seni bina. Ia menyediakan MVC, IOC, AOP dan ciri-ciri seni bina lain yang nyata tidak mempunyai, menjadikan kod lebih mudah untuk dikekalkan dan dikembangkan.

Apakah maksud MVC, IOC dan AOP di sini? Mari kita lihat masing-masing:

MVC, IOC

MVC ialah singkatan dari Model View Controller. Di bawah seni bina MVC, permintaan mula-mula dihantar kepada Pengawal, yang menghantar lapisan Perkhidmatan Model untuk melengkapkan logik perniagaan, dan kemudian mengembalikan Paparan yang sepadan.

Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Nest.js menyediakan penghias @Controller untuk mengisytiharkan Pengawal:

Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Dan Perkhidmatan akan dihiasi dengan @Injectable Untuk mengisytiharkan:

Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Kelas yang diisytiharkan melalui @Controller dan penghias @Injectable akan diimbas oleh Nest.js, objek yang sepadan akan dibuat dan ditambahkan pada bekas ini Objek akan disuntik secara automatik mengikut kebergantungan yang diisytiharkan dalam pembina, iaitu DI (dependency inject) Idea ini dipanggil IOC (Inverse Of Control).

Kelebihan seni bina IOC ialah tidak perlu mencipta objek secara manual dan menghantarnya ke dalam pembina objek berbeza berdasarkan kebergantungan Semuanya diimbas, dicipta dan disuntik secara automatik.

Selain itu, Nest.js turut menyediakan keupayaan AOP (Aspect Oriented Programming), iaitu keupayaan pengaturcaraan berorientasikan aspek:

AOP

Apakah AOP Apakah maksudnya? Apakah pengaturcaraan berorientasikan aspek?

Permintaan mungkin melalui logik Pengawal, Perkhidmatan dan Repositori (akses pangkalan data):

Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Jika anda mahu Bagaimana untuk menambah beberapa logik umum ke pautan panggilan ini? Seperti pembalakan, kawalan kebenaran, pengendalian pengecualian, dsb.

Perkara mudah untuk difikirkan ialah mengubah terus kod lapisan Pengawal dan menambah logik ini. Ini berfungsi, tetapi ia tidak elegan kerana logik biasa ini menyerang logik perniagaan. Bolehkah kita menambahkan log, kebenaran, dsb. secara telus pada logik perniagaan ini?

Adakah mungkin untuk menambah peringkat untuk melaksanakan logik biasa sebelum dan selepas memanggil Pengawal?

Contohnya:

Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Titik pengembangan mendatar sedemikian dipanggil aspek, dan kaedah pengaturcaraan jenis ini yang secara telus menambah beberapa logik aspek dipanggil AOP (Aspect berorientasikan) pengaturcaraan).

Kelebihan AOP ialah ia boleh memisahkan beberapa logik umum kepada aspek dan mengekalkan logik perniagaan tulen, supaya logik aspek boleh digunakan semula dan ditambah dan dipadamkan secara dinamik

Malah, model onion middleware Express juga merupakan pelaksanaan AOP, kerana anda boleh membungkus lapisan secara telus di bahagian luar dan menambah sedikit logik, dan lapisan dalam tidak akan menyedarinya.

Dan Nest.js mempunyai lebih banyak cara untuk melaksanakan AOP, terdapat lima kesemuanya, termasuk Middleware, Guard, Pipe, Inteceptor, ExceptionFilter:,

MiddlewareMiddleware

Nest . js secara semula jadi boleh menggunakan middleware berdasarkan Express, tetapi ia telah dibahagikan lagi kepada middleware global dan middleware penghalaan:

Middleware global ialah jenis middleware dalam Express, yang digunakan sebelum meminta dan Kemudian tambah beberapa logik pemprosesan, dan setiap permintaan akan pergi ke sini:

Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Perisian tengah penghalaan adalah untuk laluan tertentu, dengan skop yang lebih kecil:

Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Ini adalah konsep yang secara langsung mewarisi Express dan lebih mudah difahami.

Mari kita lihat beberapa konsep sambungan Nest.js, seperti Pengawal:

Pengawal

Pengawal bermaksud pengawal penghalaan, yang boleh digunakan untuk menentukan kebenaran sebelum memanggil Pengawal , kembalikan benar atau salah untuk memutuskan sama ada untuk melepaskan:

Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Cara untuk mencipta Guard adalah seperti berikut:

Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Guard perlu melaksanakan antara muka CanActivate dan kaedah canActive Ia boleh mendapatkan maklumat yang diminta daripada konteks, dan kemudian melakukan beberapa pengesahan kebenaran dan pemprosesan lain sebelum mengembalikan benar atau salah.

Tambahkannya pada bekas IOC melalui penghias @Injectable, dan kemudian dayakannya dalam Pengawal:

Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Pengawal itu sendiri tidak perlu diubah suai . Tetapi logik penghakiman kebenaran ditambah secara telus Ini adalah faedah seni bina AOP.

Dan, seperti Middleware menyokong tahap global dan tahap penghalaan, Guard juga boleh didayakan secara global:

1Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Guard boleh mengabstrak logik kawalan akses penghalaan, Walau bagaimanapun, permintaan dan respons tidak boleh diubah suai. Logik jenis ini boleh menggunakan Pemintas:

Pemintas

Pemintas bermaksud pemintas Anda boleh menambah beberapa logik sebelum dan selepas kaedah Pengawal sasaran:

1Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Cara untuk mencipta Inteceptor adalah seperti berikut:

1Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Interceptor Untuk melaksanakan antara muka NestInterceptor, laksanakan kaedah pintasan dan panggil next.handle() Pengawal sasaran akan dipanggil, dan beberapa logik pemprosesan boleh ditambah sebelum dan selepas.

Logik pemprosesan sebelum dan selepas Pengawal mungkin tidak segerak. Nest.js menyusunnya melalui rxjs, jadi anda boleh menggunakan pelbagai pengendali rxjs.

Pemintas menyokong pengaktifan bebas bagi setiap laluan, yang hanya mempengaruhi pengawal tertentu Ia juga menyokong pengaktifan global, yang mempengaruhi semua pengawal:

1Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

1Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Selain penghalaan kawalan kebenaran dan pemprosesan sebelum dan selepas Pengawal sasaran, yang semuanya logik biasa, pemprosesan parameter juga merupakan logik biasa, jadi Nest.js juga mengekstrak aspek yang sepadan, iaitu, Paip:

Paip

Paip bermaksud saluran paip dan digunakan untuk melakukan beberapa pengesahan dan penukaran parameter:

1Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Cara untuk mencipta Paip adalah seperti berikut :

1Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Paip perlu melaksanakan antara muka PipeTransform dan melaksanakan kaedah transformasi, yang boleh melakukan pengesahan parameter pada nilai parameter masuk, seperti sama ada format dan jenis adalah betul. Anda juga boleh melakukan penukaran dan mengembalikan nilai yang ditukar.

Terdapat 8 Paip terbina dalam, dan maknanya boleh dilihat daripada namanya:

  • ValidationPipe
  • ParseIntPipe
  • ParseBoolPipe
  • ParseArrayPipe
  • ParseUUIDPipe
  • DefaultValuePipe
  • ParseEnumPipe
  • ParseFloatPipe

Begitu juga, Paip hanya boleh berkuat kuasa pada laluan tertentu, atau ia boleh berkuat kuasa pada setiap laluan:

1Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

1Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Sama ada Paip, Pengawal, Pemintas atau Pengawal yang akhirnya dipanggil, beberapa pengecualian boleh dilemparkan semasa proses Bagaimana untuk bertindak balas terhadap pengecualian tertentu?

Pemetaan pengecualian kepada respons ini juga merupakan logik biasa Nest.js menyediakan ExceptionFilter untuk menyokong:

ExceptionFilter

ExceptionFilter boleh mengendalikan pengecualian yang dilemparkan, kembalikan respons yang sepadan:

Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Bentuk mencipta ExceptionFilter adalah seperti berikut:

2Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Pertama, laksanakan antara muka ExceptionFilter, Dengan melaksanakan tangkapan kaedah, anda boleh memintas pengecualian, tetapi pengecualian yang anda ingin memintas perlu diisytiharkan dengan penghias @Catch Selepas memintas pengecualian, anda boleh bertindak balas dengan pengecualian yang sepadan untuk memberi pengguna gesaan yang lebih mesra.

Sudah tentu, bukan semua pengecualian akan dikendalikan Hanya pengecualian yang mewarisi HttpException akan dikendalikan oleh ExceptionFilter.js mempunyai banyak subkelas terbina dalam HttpException:

  • BadRequestException
  • UnauthorizedException
  • NotFoundException
  • ForbiddenException
  • NotAcceptableException
  • RequestTimeoutException
  • ConflictException
  • GoneException
  • PayloadTooLargeException
  • UnsupportedMediaTypeException
  • UnprocessableException
  • InternalServerErrorException
  • NotImplementedException
  • BadGatewayException
  • ServiceUnavailableException
  • GatewayTimeoutException
Sudah tentu, anda juga boleh memanjangkannya sendiri:

2Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Nest.js mencapai hubungan yang sepadan antara pengecualian dan respons dengan cara ini selagi berbeza lontaran dilemparkan dalam kod HttpException, tindak balas yang sepadan akan dikembalikan, yang sangat mudah.

Begitu juga, ExceptionFilter juga boleh memilih untuk berkuat kuasa secara global atau laluan tertentu:

Laluan tertentu:

2Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Secara global :

2Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Kami memahami mekanisme AOP yang disediakan oleh Nest.js, tetapi apakah hubungan berjujukan mereka?

Jujukan beberapa mekanisme AOP

Perisian Tengah, Pengawal, Paip, Pemintas dan Penapis Pengecualian semuanya boleh menambah logik pemprosesan tertentu secara telus pada laluan tertentu atau semua laluan Ini adalah faedah AOP.

Tetapi apakah hubungan berurutan antara mereka?

Hubungan panggilan bergantung pada kod sumber. Kod sumber yang sepadan

adalah seperti berikut:

2Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Jelas sekali, apabila memasuki laluan ini, Guard akan dipanggil terlebih dahulu untuk menentukan sama ada terdapat kebenaran, dsb. ., jika bukan Kebenaran, pengecualian dilemparkan di sini:

2Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

HttpException yang dilemparkan akan dikendalikan oleh ExceptionFilter.

Jika anda mempunyai kebenaran, pemintas akan dipanggil Pemintas mengatur rantai, memanggil satu demi satu, dan akhirnya memanggil kaedah pengawal:

2Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Sebelum memanggil kaedah pengawal, paip akan digunakan untuk memproses parameter:

2Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Setiap parameter akan ditukar:

2Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya

Masa panggilan ExceptionFilter mudah difikirkan, iaitu mengendalikan pengecualian sebelum membalas.

Dan Middleware ialah konsep dalam bentuk ekspres Nest.js hanya mewarisinya dan ia dipanggil pada lapisan paling luar.

Ini ialah urutan panggilan bagi mekanisme AOP ini. Setelah anda menyelesaikan perkara ini, anda akan memahami Nest.js dengan baik.

Ringkasan

Nest.js ialah lapisan enkapsulasi berdasarkan platform http seperti ekspres dan menggunakan idea seni bina seperti MVC, IOC dan AOP.

MVC ialah pembahagian Model dan View Controller Permintaan mula-mula melalui Pengawal, kemudian memanggil Perkhidmatan dan Repositori lapisan Model untuk melengkapkan logik perniagaan, dan akhirnya mengembalikan Paparan yang sepadan.

IOC bermakna Nest.js akan mengimbas kelas secara automatik dengan @Controller dan penghias @Injectable, mencipta objeknya dan secara automatik menyuntik objek yang bergantung padanya berdasarkan kebergantungan, menghapuskan masalah pembuatan dan pemasangan secara manual.

AOP mengekstrak logik umum dan menambahkannya ke tempat tertentu melalui aspek Ia boleh menggunakan semula dan menambah serta memadam logik aspek secara dinamik.

Middleware, Guard, Interceptor, Pipe, dan ExceptionFileter of Nest.js adalah semua pelaksanaan idea AOP Semuanya boleh digunakan secara fleksibel pada laluan tertentu atau semua laluan ini ialah Kelebihan AOP.

Kami melihat urutan panggilan mereka melalui kod sumber adalah konsep Ekspres Pada lapisan paling luar, selepas mencapai laluan tertentu, Pengawal akan digunakan untuk menentukan sama ada laluan itu kebenaran untuk mengakses, dan kemudian Pemintas akan dipanggil untuk melanjutkan beberapa logik sebelum dan selepas Pengawal Sebelum mencapai Pengawal sasaran, Paip akan dipanggil untuk mengesahkan dan menukar parameter. Semua pengecualian HttpException akan dikendalikan oleh ExceptionFilter dan mengembalikan respons yang berbeza.

Nest.js menggunakan seni bina AOP ini untuk mencapai seni bina yang gandingan longgar, mudah diselenggara dan dikembangkan.

Adakah anda merasakan faedah seni bina AOP?

Untuk lebih banyak pengetahuan berkaitan nod, sila lawati:

tutorial nodejs!

Atas ialah kandungan terperinci Fahami seni bina AOP Node.js Nest.js dan bincangkan tentang faedahnya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!