Artikel ini akan bercakap tentang cara rangka kerja nod Nest.js menyepadukan Express dengan cara yang longgar, saya harap ia akan membantu anda.
Nodejs menyediakan modul http untuk mendengar port, memproses permintaan http dan membalas respons, yang merupakan perkara utama yang dilakukannya.
Walau bagaimanapun, api modul http terlalu primitif, dan menyusahkan untuk memproses respons permintaan secara langsung berdasarkannya, jadi kami akan merangkumnya dengan perpustakaan seperti ekspres.
Apa yang dilakukan oleh lapisan ini ialah menambahkan banyak kaedah pemprosesan permintaan dan tindak balas kepada permintaan dan tindak balas untuk memenuhi keperluan pelbagai senario, dan mengendalikan penghalaan, dan juga menyediakan rantaian panggilan perisian tengah Untuk memudahkan penggunaan semula beberapa kod, rantai panggilan middleware ini dipanggil model bawang.
Tetapi lapisan ini tidak menyelesaikan masalah seni bina: apa yang perlu dilakukan apabila terdapat terlalu banyak modul dan bagaimana untuk menguruskannya? Bagaimana untuk membahagikan Model, Pandangan dan Pengawal? dll.
Jadi, apabila menggunakan Node.js untuk perkhidmatan back-end, kami akan memasukkan lapisan lain untuk menyelesaikan masalah seni bina Rangka kerja pada lapisan ini termasuk eggjs (semut), midwayjs (Taobao), nestjs (asing). ).
nestjs ialah salah satu yang terbaik:
Lapisan ini Bahagian bawah lapisan adalah ekspres, koa, dll. Ia hanya menyelesaikan masalah seni bina tambahan berdasarkan rangka kerja http tersebut.
Dan nestjs melakukan satu perkara dengan baik. Ia tidak bergantung pada mana-mana platform http dan boleh ditukar secara fleksibel.
Jadi, bagaimanakah nestjs mencapai penukaran platform asas?
Fikirkan tentang bagaimana tindak balas menyebabkan vdom kepada kanvas, dom dan asli?
Tentukan antara muka bersatu, dan logik pemaparan pelbagai platform melaksanakan antara muka ini. Mod ini dipanggil mod penyesuai.
Mod penyesuai bermaksud bahawa apabila menggunakan fungsi yang dilaksanakan oleh pihak ketiga, ia tidak bergantung secara langsung padanya, tetapi mentakrifkan lapisan antara muka untuk membolehkan pihak ketiga menyesuaikan diri dengan lapisan antara muka ini . Dengan cara ini, sebarang penyelesaian yang menyesuaikan diri dengan lapisan antara muka ini boleh disepadukan dan penyelesaian boleh ditukar secara fleksibel.
Nest.js menyediakan lapisan antara muka (HttpServer) kepada platform http asas dan mentakrifkan sekumpulan kaedah:
Oleh kerana antara muka daripada ts mesti melaksanakan semua kaedah, untuk memudahkannya, ia mewarisi kelas abstrak AbstractHttpAdapter dan mentakrifkan kaedah yang perlu dilaksanakan sebagai abstrak.
Kemudian express atau platform lain seperti fastify hanya perlu mewarisi kelas penyesuai dan melaksanakan kaedah abstraknya untuk menyambung ke Nest.js:
Sebagai contoh , ExpressAdapter:
atau FastifyAdapter:
Logik ini diletakkan dalam platform-express dan platform-fastify masing-masing Dalam pakej:
Nest.js Baris pertama kod adalah untuk memanggil create:
create akan memilih Gunakan httpAdapter untuk mencipta perkhidmatan:
Lalainya ialah ekspres:
Dengan cara ini, permintaan dan respons kaedah dipanggil kemudian Pada akhirnya, semuanya nyata.
Sebagai contoh, dalam pengawal, anda boleh menggunakan penghias @Request untuk menyuntik objek reqeust, dan kemudian anda boleh memanggil pelbagai kaedah reqeust.
import { Controller, Get, Request } from '@nestjs/common'; @Controller('cats') export class CatsController { @Get() findAll(@@Request() request: Request): string { return 'This action returns all cats'; } }
Jika anda ingin memanggil beberapa kaedah khusus platform di luar antara muka, Nest.js turut menyokongnya, kemudian gunakan @Req sebaliknya untuk menyuntik:
import { Controller, Get, Req } from '@nestjs/common'; @Controller('cats') export class CatsController { @Get() findAll(@@Req() request: Request): string { return 'This action returns all cats'; } }
Suntikan seperti ini Ia adalah objek permintaan asli bagi platform tertentu seperti ekspres, dan semua kaedahnya boleh digunakan secara langsung.
Selain itu, jika anda benar-benar mahu menggunakan API khusus platform Express, anda boleh menentukan parameter jenis yang sepadan apabila NestFactory.create, supaya anda boleh melakukan pembayang dan semakan jenis yang sepadan:
Walau bagaimanapun, ini akan digabungkan dengan platform tertentu Melainkan anda pasti bahawa anda tidak akan menukar platform, adalah tidak disyorkan untuk melakukan ini.
Platform http melakukan ini, dan begitu juga, platform websocket melakukan perkara yang sama:
mentakrifkan antara muka bersatu yang menghubungkan socketio dan websocket masing-masing melalui penyesuai, yang boleh ditukar secara fleksibel:
Ilustrasi Nest.js pemprosesan http dan platform soket web:
Node.js menyediakan modul http untuk memantau port dan memproses respons permintaan, tetapi APInya terlalu primitif, jadi kami akan memasukkan satu lapisan dan menyediakan lebih banyak permintaan dan tindak balas API pada lapisan ekspres, tetapi Lapisan ini tidak menyelesaikan masalah seni bina , IOC dan seni bina lain, lapisan lain perlu disertakan, menggunakan rangka kerja bahagian belakang peringkat lebih tinggi seperti Egg.js, Midway.js dan Nest.js, antaranya Nest.js adalah yang terbaik.
Nest.js telah membuat reka bentuk khas untuk disepadukan dengan platform http asas Ia menggunakan mod penyesuai untuk menyediakan lapisan antara muka untuk platform asas untuk disesuaikan, supaya platform http yang berbeza boleh ditukar secara fleksibel. .
Tetapi ia juga menyokong penggunaan API khusus platform Contohnya, anda boleh menggunakan @Req untuk menyuntik objek permintaan asas dalam pengawal, dan anda juga boleh memasukkan parameter jenis platform yang sepadan apabila. mencipta bekas.
Nest.js menggunakan Express secara lalai, tetapi tidak betul sepenuhnya untuk mengatakan bahawa Express digunakan, kerana anda boleh bertukar kepada orang lain secara fleksibel. Inilah keindahan corak penyesuai.
Untuk lebih banyak pengetahuan berkaitan nod, sila lawati: tutorial nodejs!
Atas ialah kandungan terperinci Mari kita bincangkan tentang cara rangka kerja nod Nest.js menyepadukan Express dengan gandingan longgar!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!