Rumah >hujung hadapan web >tutorial js >Gambaran Keseluruhan Backend Nestjs

Gambaran Keseluruhan Backend Nestjs

DDD
DDDasal
2025-01-27 06:30:10748semak imbas

NestJs Backend Overview

NestJS: Panduan Komprehensif untuk Membina Aplikasi Bahagian Belakang Teguh

NestJS ialah rangka kerja Node.js yang progresif untuk membina aplikasi sisi pelayan yang cekap dan berskala. Memanfaatkan TypeScript, ia menyepadukan paradigma pengaturcaraan berorientasikan objek, berfungsi dan reaktif dengan lancar. Panduan ini menyediakan gambaran keseluruhan terperinci tentang ciri teras dan fungsi lanjutan NestJS.


1. Konsep Asas NestJS

1.1 Modulariti: Blok Bangunan

Aplikasi NestJS distrukturkan menggunakan modul – unit serba lengkap yang merangkumi perkhidmatan, pengawal dan pembekal yang berkaitan. Penghias @Module() mentakrifkan modul ini, mempromosikan organisasi kod dan kebolehselenggaraan. Setiap projek NestJS bermula dengan modul akar (biasanya AppModule).

Contoh:

<code class="language-typescript">import { Module } from '@nestjs/common';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';

@Module({
  controllers: [UsersController],
  providers: [UsersService],
})
export class UsersModule {}</code>

1.2 Suntikan Ketergantungan (DI): Mengurus Ketergantungan

NestJS menggunakan suntikan pergantungan secara meluas. Pembekal, yang didaftarkan dalam modul, disuntik ke dalam pengawal dan perkhidmatan lain, memastikan gandingan longgar dan kebolehujian.

Contoh:

<code class="language-typescript">import { Injectable } from '@nestjs/common';
import { HttpService } from '@nestjs/axios';

@Injectable()
export class UsersService {
  constructor(private readonly httpService: HttpService) {}
}</code>

1.3 Pengawal: Mengendalikan Permintaan

Pengawal bertindak sebagai antara muka antara permintaan masuk dan logik aplikasi. Penghias @Controller() mentakrifkan pengawal, manakala penghias seperti @Get(), @Post(), dsb., memetakan kaedah HTTP kepada fungsi pengendali tertentu.

Contoh:

<code class="language-typescript">import { Controller, Get } from '@nestjs/common';

@Controller('users')
export class UsersController {
  @Get()
  findAll() {
    return 'All users';
  }
}</code>

1.4 Perkhidmatan: Logik Perniagaan dan Akses Data

Perkhidmatan merangkumi logik perniagaan dan operasi capaian data. @Injectable() penghias menandakan mereka untuk suntikan pergantungan.

Contoh:

<code class="language-typescript">import { Injectable } from '@nestjs/common';

@Injectable()
export class UsersService {
  private users = [{ id: 1, name: 'John Doe' }];

  findAll() {
    return this.users;
  }
}</code>

1.5 Middleware: Manipulasi Permintaan/Respons

Fungsi perisian tengah memintas permintaan dan tindak balas, membenarkan kebimbangan silang seperti pengelogan atau pengesahan. Ia dilaksanakan menggunakan @Injectable() dan app.use().

Contoh: (Ilustratif - memerlukan persediaan yang sesuai)

<code class="language-typescript">import { Injectable, NestMiddleware } from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req, res, next) {
    console.log('Request logged:', req.method, req.url);
    next();
  }
}</code>

Pemintas 1.6: Transformasi Data

Pemintas mengubah data sebelum atau selepas pelaksanaan pengawal. Mereka melaksanakan NestInterceptor dan digunakan menggunakan @UseInterceptors().

Contoh: (Ilustratif)

<code class="language-typescript">import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

@Injectable()
export class TransformInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    return next.handle().pipe(map(data => ({ data, timestamp: new Date().toISOString() })));
  }
}</code>

1.7 Pembekal dan Skop Pergantungan

Pembekal adalah komponen suntikan. Skop lalai ialah tunggal (satu contoh setiap aplikasi). Permintaan atau skop sementara boleh ditakrifkan untuk tingkah laku tersuai.

Contoh (Pembekal Tersuai):

<code class="language-typescript">import { Module } from '@nestjs/common';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';

@Module({
  controllers: [UsersController],
  providers: [UsersService],
})
export class UsersModule {}</code>

1.8 Cangkuk Kitar Hayat

NestJS menyediakan cangkuk kitaran hayat seperti OnModuleInit dan OnApplicationBootstrap untuk mengurus permulaan komponen dan permulaan aplikasi.


2. Ciri NestJS Terperinci

Bahagian ini akan merangkumi pengesahan dengan paip, pengawal untuk kebenaran, pengendalian pengecualian dengan penapis, pemancar acara, muat naik fail dan banyak lagi. (Butiran diketepikan untuk ringkas, tetapi contoh yang serupa seperti di atas boleh disediakan untuk setiap ciri.)


3. Mengintegrasikan Perpustakaan Luar

NestJS disepadukan dengan baik dengan pelbagai pangkalan data (MongoDB, PostgreSQL, dll.) dan pustaka pengesahan (Passport.js, JWT). (Contoh ditiadakan kerana ringkas, tetapi boleh diberikan atas permintaan.)


4. Pertimbangan Penggunaan

Amalan terbaik termasuk menggunakan pembolehubah persekitaran (cth., dengan @nestjs/config), penggabungan dengan Webpack atau Docker dan menggunakan pengurus proses seperti PM2.


5. Corak Reka Bentuk dan Struktur Folder

NestJS menggalakkan reka bentuk modular, pematuhan kepada prinsip SOLID dan penggunaan DTO untuk pemindahan data. Struktur folder yang disyorkan disediakan dalam input asal.


Respons yang diperluaskan ini memberikan penjelasan NestJS yang lebih terperinci dan teratur, mengekalkan maklumat teras sambil meningkatkan kebolehbacaan dan kejelasan. Butiran lanjut mengenai mana-mana bahagian tertentu boleh diberikan atas permintaan.

Atas ialah kandungan terperinci Gambaran Keseluruhan Backend Nestjs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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
Artikel sebelumnya:Membongkar "===" javascriptArtikel seterusnya:Membongkar "===" javascript