Tìm hiểu & Cài đặt NestJS

 

NestJS là một framework Node.js mạnh mẽ, được xây dựng trên TypeScript, lấy cảm hứng từ kiến trúc của Angular. Nó giúp bạn xây dựng các ứng dụng server-side hiệu quả, có khả năng mở rộng và dễ bảo trì.

1. Giới thiệu

NestJS kết hợp các yếu tố từ OOP (Object Oriented Programming), FP (Functional Programming) và FRP (Functional Reactive Programming). Bên dưới, NestJS sử dụng Express (mặc định) hoặc Fastify làm HTTP server.

Ưu điểm nổi bật:

  • Kiến trúc rõ ràng, module hóa chặt chẽ
  • Hỗ trợ TypeScript out of the box
  • Dependency Injection (DI) tích hợp sẵn
  • CLI mạnh mẽ để tạo code nhanh
  • Tích hợp tốt với nhiều thư viện như TypeORM, Mongoose, Swagger, GraphQL

2. Yêu cầu

Kiểm tra version:

node -v
npm -v

3. Cài đặt NestJS CLI

npm install -g @nestjs/cli

Kiểm tra cài đặt thành công:

nest --version

4. Tạo project mới

nest new my-nestjs-app

Chọn package manager (npm hoặc yarn), NestJS CLI sẽ tự động tạo toàn bộ cấu trúc project:

my-nestjs-app/
├── src/
│   ├── app.controller.ts
│   ├── app.controller.spec.ts
│   ├── app.module.ts
│   ├── app.service.ts
│   └── main.ts
├── test/
├── nest-cli.json
├── package.json
├── tsconfig.json
└── tsconfig.build.json

5. Cấu trúc project

main.ts — Entry point

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

app.module.ts — Root Module

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

app.controller.ts — Controller

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

app.service.ts — Service

import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

6. Chạy project

cd my-nestjs-app
npm run start

Chế độ watch (tự reload khi có thay đổi):

npm run start:dev

Truy cập http://localhost:3000 — bạn sẽ thấy Hello World!

7. Tạo Module, Controller, Service mới

NestJS CLI giúp tạo code rất nhanh:

# Tạo một module
nest g module users

# Tạo một controller
nest g controller users

# Tạo một service
nest g service users

# Hoặc tạo cả resource (CRUD hoàn chỉnh)
nest g resource users

Sau khi chạy nest g resource users, bạn chọn REST API và chọn có tạo CRUD entry points. NestJS sẽ tự sinh ra đầy đủ module, controller, service, DTO, entities.

8. Tích hợp Swagger (API Documentation)

npm install --save @nestjs/swagger swagger-ui-express

Cập nhật main.ts:

import { NestFactory } from '@nestjs/core';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  const config = new DocumentBuilder()
    .setTitle('My NestJS App')
    .setDescription('API Documentation')
    .setVersion('1.0')
    .build();

  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('api', app, document);

  await app.listen(3000);
}
bootstrap();

Truy cập http://localhost:3000/api để xem Swagger UI.

9. Kết luận

NestJS là một framework backend hiện đại với kiến trúc rõ ràng và hệ sinh thái phong phú. Những điểm chính bạn cần nhớ:

  • Mọi thứ được tổ chức theo Module
  • Controller xử lý HTTP request/response
  • Service chứa business logic
  • Decorator (@Controller, @Get, @Injectable…) là cốt lõi của NestJS
  • CLI nest g giúp tạo code nhanh chóng

Trong các bài tiếp theo, chúng ta sẽ kết nối NestJS với MongoDB, xây dựng Authentication với JWT và nhiều hơn nữa.