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

Gambaran Keseluruhan Backend Nestjs

DDD
Lepaskan: 2025-01-27 06:30:10
asal
710 orang telah melayarinya

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>
Salin selepas log masuk
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk
Salin selepas log masuk

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!

sumber:php.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