NỘI DUNG

NestJS là gì? Hướng dẫn NestJS dành cho người mới bắt đầu

Cao Lê Viết Tiến

Đã kiểm duyệt nội dung

Ngày đăng:24/04/2025
Cập nhật cuối:26/04/2025
Lượt xem

Đánh giá

5/5 - (70 bình chọn)

NestJS là một framework Node.js được xây dựng dựa trên TypeScript giúp bạn tạo ra các ứng dụng backend hiệu suất cao, có khả năng mở rộng và dễ dàng kiểm thử. Trong bài viết này, mình sẽ chia sẽ hướng dẫn toàn diện dành cho người mới bắt đầu làm quen với NestJS, giúp bạn nhanh chóng nắm bắt các khái niệm cốt lõi.

Những điểm chính

  • Khái niệm NestJS: Hiểu được NestJS là một framework Node.js xây dựng trên TypeScript, giúp tạo ứng dụng backend hiệu suất cao, dễ mở rộng và kiểm thử.
  • Tại sao nên sử dụng NestJS: Bao gồm các ưu điểm như sử dụng TypeScript, thiết kế module hóa, quản lý phụ thuộc bằng DI, tích hợp sẵn Validation, nhiều tính năng nâng cao, cộng đồng hỗ trợ tích cực.
  • Hướng dẫn cài đặt NestJS: Bạn sẽ biết chi tiết cách cài đặt và thiết lập NestJS, bao gồm cài đặt NodeJS/NPM, cài đặt Nest CLI, tạo project và chạy ứng dụng.
  • Cấu trúc của NestJS: Bao gồm các thành phần chính như Controller, Provider, Module, Middleware, Pipes & Guards, Interceptors, Exception Handling, Filter, Testing.
  • So sánh NestJS vs ExpressJS: So sánh ngắn gọn 2 công cụ về các yếu tố kiến trúc, ngôn ngữ, độ phổ biến, hiệu suất và ứng dụng điển hình.
  • Tự học NestJS miễn phí: Bạn có thể tham khảo các nguồn tài liệu về NestJS hữu ích như Website chính thức của NestJS, FreeCodeCamp, nền tảng Udemy/Coursera, W3Schools.io, Mastering Backend, YouTube.
  • Biết đến Vietnix là nhà cung cấp VPS tốc độ cao và ổn định hàng đầu Việt Nam.

NestJS là gì?

NestJS là một framework Node.JS mã nguồn mở giúp xây dựng ứng dụng phía server. Nest mở rộng các framework Node.js như Express hay Fastify để bổ sung thêm nhiều module hay thư viện hỗ trợ việc xử lý tác vụ. NestJS sử dụng TypeScript và kết hợp với các tính năng của OOP (Object Oriented Programming), FP (Functional Programming) và FRP (Functional Reactive Programming) nên rất linh hoạt để xây dựng các hệ thống backend. Bên cạnh đó, NestJS còn giúp mở rộng các server Node để hỗ trợ những cơ sở dữ liệu như MongoDB, Redis hay Apache Cassandra.

Khái niệm NestJS
Khái niệm NestJS

Để những ứng dụng được phát triển bằng NestJS phát huy tối đa hiệu năng và luôn sẵn sàng phục vụ người dùng, việc lựa chọn một nền tảng máy chủ ổn định và tốc độ cao là vô cùng quan trọng. Dịch vụ VPS Giá Rẻ của Vietnix nổi bật với cam kết uptime lên đến 99.9%, backup dữ liệu hằng tuần miễn phí và hỗ trợ kỹ thuật 24/7. Điều này đặc biệt cần thiết cho các ứng dụng backend xây dựng bằng NestJS, đảm bảo khả năng phản hồi nhanh chóng và sự ổn định ngay cả khi lượng truy cập tăng cao.

Tại sao nên sử dụng Framework NestJS?

Java là một ngôn ngữ lập trình với tuổi đời hơn 20 năm, từng là framework chính cho nhiều ứng dụng kinh doanh. Tuy nhiên những năm gần đây các developer đang dần chuyển sự chú ý của mình sang một cái tên mới: Node.JS. Đây là một nền tảng có tốc độ cực nhanh, hỗ trợ JavaScript và cho phép các developer xây dựng cả frontend lẫn backend chỉ với một ngôn ngữ lập trình duy nhất. NestJS lại mang đến một hướng tiếp cận hiện đại với nhiều ưu điểm nổi bật:

  • Sử dụng TypeScript: Được xây dựng trên TypeScript, NestJS giúp code sạch hơn, dễ dàng phát hiện và xử lý lỗi.
  • Thiết kế module hóa: Kiến trúc module của NestJS (bao gồm controllers, providers và modules) giúp tổ chức, phát triển và quản lý mã nguồn hiệu quả, dễ dàng mở rộng, đặc biệt hữu ích cho các dự án phức tạp, quy mô lớn
  • Quản lý phụ thuộc bằng DI: Cơ chế Dependency Injection (DI) trong NestJS giúp quản lý sự phụ thuộc giữa module và component hiệu quả, tăng tính linh hoạt, dễ test, dễ mở rộng và dễ bảo trì.
  • Tích hợp sẵn Validation: Framework này cung cấp cơ chế để định nghĩa và thực thi các quy tắc validation rule, giúp giảm thiểu lỗi và tăng tính bảo mật.
  • Nhiều tính năng nâng cao: NestJS hỗ trợ tích hợp các tính năng như Rest API, MVC, microservices, GraphQL, Web Socket hay CRON job, giúp đơn giản hóa việc phát triển các ứng dụng realtime hoặc kiến trúc microservices.
  • Cộng đồng hỗ trợ tích cực: Là framework Node.js phát triển mạnh nhất trong 3 năm trở lại đây, NestJS có cộng đồng hỗ trợ lớn, tích cực và có nguồn tài liệu hướng dẫn phong phú, chi tiết.
  • Kết hợp phát triển front-end và mid-tier, một đặc điểm vượt trội so với hầu hết các ngôn ngữ khác.
  • Quá trình unit testing trở nên đơn giản hơn.
  • Cấu trúc chủ yếu dựa vào Angular – rất đơn giản và cho phép tập trung vào việc thiết kế endpoint thay vì cấu trúc của ứng dụng.
  • Có tính chất kết nối lỏng, do đó những lỗi cũ trong dự án không ảnh hưởng đến cấu trúc của codebase sau này.

Bước 1 – Cài đặt NodeJS và NPM

Vì NestJS được xây dựng trên NodeJS, nên máy tính của bạn cần phải cài sẵn NodeJS và NPM (Node Package Manager). Bạn có tải phiên bản Node.js mới nhất từ trang chủ chính thức (https://nodejs.org/) và tiến hành cài đặt theo hướng dẫn.

Bước 2 – Cài đặt công cụ Nest CLI

Để sử dụng NestJS thì bạn cần cài đặt sẵn công cụ Nest CLI (Command Line Interface) bằng NPM như sau:

$ npm i -g @nestjs/cli

Bước 3 – Tạo project NestJS

Với NestJS CLI, việc tạo một dự án mới trở nên đơn giản, bạn chỉ cần chạy lệnh sau trong terminal, thay thế my-nestjs-01 bằng tên dự án thực tế của bạn:

$ nest new my-nestjs-01

Bước 4 – Chạy ứng dụng NestJS

Bạn di chuyển đến thư mục chứa dự án vừa tạo bằng lệnh:

cd my-nestjs-01

Sau đó bạn khởi động ứng dụng NestJS:

npm run start

Để kích hoạt chế độ tự động restart server khi code thay đổi, bạn chạy lệnh:

npm run start:dev

Cuối cùng, bạn mở trình duyệt và truy cập theo đường dẫn http://localhost:3000 (hoặc port khác nếu bạn đã cấu hình lại) để xem ứng dụng đang hoạt động hay chưa.

Sau khi tạo dự án NestJS xong, bạn sẽ có một source code với cấu trúc như sau:

Source code sau khi chạy 2 lệnh trên
Source code sau khi chạy 2 lệnh trên

Ta chỉ cần để ý đến thư mục src với ba file được tạo sẵn:

  • main.ts: File để khởi tạo các đối tượng chạy ứng dụng, chẳng hạn ta có thể dùng lệnh NestFactory.create() để tạo instance cho Nest.
  • app.module.ts: Là module gốc của ứng dụng, có trách nhiệm đóng gói mọi thứ có trong project.
  • app.controller.ts: Chứa các router để xử lý các request và trả về response cho client.
  • app.services.ts: Chứa các hàm xử lý logic cho service, chẳng hạn như ứng dụng có service kết nối đến DB hoặc xử lý file,…
  • app.controller.spec.ts: File dùng để viết unit test cho các controller.

Nhìn chung thì có 3 thành phần chính trong NestJS: controller, provider và module. Trước hết, main.ts sẽ sử dụng static method create() của NestFactory để tạo server app như sau:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

Controller

Khi có request HTTP đến, cơ chế routing sẽ chuyển request này đến controller tương ứng để xử lý và trả về phản hồi thích hợp. Để tạo một controller thì ta dùng @Controller() để liên kết class Controller với request tương ứng. Ngoài ra thì ta cũng có thể dùng lệnh $ nest g controller users trong cmd để tạo controller.

import { Controller, Get } from '@nestjs/common';

@Controller('users')
export class UsersController {
  @Get()
  findAll(): string {
    return 'This action returns all users';
  }
}

Như vậy chúng ta đã tạo ra một API với url GET: /users. Trong @Controller thì ta đã sử dụng tiền tố users làm route path, việc sử dụng như vậy sẽ tập hợp các route liên quan và giảm thiểu việc lặp code. Để xác định method cụ thể cho một request chúng ta sẽ định nghĩa @Get() trên hàm findAll(). Việc khai báo như vậy sẽ giúp Nest có thể ánh xạ request Get: /users đến hàm findAll() này để xử lý và response lại cho client.

Ngoài Get() thì Nest cũng cung cấp đầy đủ các phương thức như những framework khác, như @Post(), @Delete(), @Put(), @Path(),… Ta có thể cấu hình http status code và header như đoạn code dưới đây:

@Post()
@HttpCode(204)
@Header('Cache-Control', 'none')
create() {
  return 'This action adds a new cat';
}

Thêm một điểm nữa là Nest cho phép ràng buộc dữ liệu gửi lên từ request để ngăn lỗi dữ liệu không hợp lệ trước khi xử lý. Trong folder dto (Data Transfer Object) ta tạo file create-user.dto.ts như sau:

export class CreateUserDto {
  name: string;
  age: number;
  address: string;
  job: string;
}

Rồi sau đó dùng CreateUserDto trong controller để ràng buộc kiểu dữ liệu. Thêm đoạn code sau vào users.controller.ts:

@Post()
async create(@Body() createUserDto: CreateUserDto) {
  return 'This action adds a new user';
}

Provider

Provider là thành phần cơ bản trong Nest, một provider có thể được đưa vào làm một dependency để tạo ra mối liên hệ giữa nhiều đối tượng khác nhau. Các lớp như services, repositories hay helpers có thể được xem như provider bằng cách thêm decorator @Injectable() vào.

Các provider trong NestJS có thể được đưa vào một class thông qua constructor, sau đó Nest sẽ đảm nhiệm việc xử lý các dependency, giúp cho việc quản lý những dependency này trở nên đơn giản hơn rất nhiều.

Để tạo một service chứa các logic xử lý của UserController, ta có thể tạo một UserService trong file user.service.ts dưới đây, hoặc dùng lệnh $ nest g service cats trong cmd:

import { Injectable } from '@nestjs/common';
import { User } from './interfaces/user.interface';

@Injectable()
export class UsersService {
  private readonly users: User[] = [];

  create(user: User) {
    this.users.push(cat);
  }

  findAll(): User[] {
    return this.users;
  }
}

Trong service trên, ta đã dùng một interface để định nghĩa User. Bây giờ hãy tạo user.interface.ts trong folder interface như sau:


export interface User {
  name: string;
  age: number;
  job: string;
}

Và cuối cùng là sử dụng bên trong các route của controller:

import { Controller, Get, Post, Body } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UsersService } from './users.service';
import { User } from './interfaces/user.interface';

@Controller('users')
export class UsersController {
  constructor(private usersService: UsersService) {}

  @Post()
  async create(@Body() createUserDto: CreateUserDto) {
    this.usersService.create(createUserDto);
  }

  @Get()
  async findAll(): Promise<User[]> {
    return this.usersService.findAll();
  }
}

Module

Một module được thiết kế để đóng gói các logic liên quan của những chức năng cần triển khai đến client một cách độc lập. Một module trong Nest là class được định nghĩa với decorator @Module() của Nest, dùng để mô tả các thuộc tính như controller, provider hay dependency của module này.

Một file module cơ bản sẽ có dạng như sau:

users/user.module.ts
import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';

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

Ngoài ra, Nest cũng cho phép tạo module, controller bằng CLI:

$ nest g module users

Sau khi định nghĩa xong module users, ta cần phải import vào module gốc của project (app.module.ts):

import { Module } from '@nestjs/common';
import { UsersModule } from './users/users.module';

@Module({
  imports: [UsersModule],
})
export class AppModule {}

Middleware

Middleware là các hàm thực thi trước hoặc sau khi yêu cầu được xử lý bởi controller, đảm nhiệm các tác vụ chung như xác thực người dùng, ghi nhật ký, xử lý và bắt lỗi, kiểm soát quyền truy cập, kiểm tra dữ liệu đầu vào,… Việc sử dụng middleware giúp tách biệt logic xử lý yêu cầu khỏi controller, tăng khả năng đọc, bảo trì và mở rộng mã nguồn.

Pipes và Guards

Pipes hoạt động như bộ lọc, kiểm tra và chuyển đổi dữ liệu đầu vào trước khi chúng được xử lý bởi controller hoặc service nhằm đảm bảo dữ liệu hợp lệ và được định dạng chính xác. Còn Guards chịu trách nhiệm kiểm tra các yếu tố như quyền truy cập, xác thực người dùng, kiểm tra token của một yêu cầu để xem nó có thể được controller xử lý không.

Interceptors

Interceptors là các lớp lớp middleware cho phép can thiệp và điều chỉnh quá trình xử lý của controller. Chúng có thể thêm các hành động trước và sau khi yêu cầu được xử lý, chẳng hạn như ghi nhật ký, xử lý lỗi hoặc bổ sung thông tin vào phản hồi.

Exception Handling

NestJS cung cấp một hệ thống Exception handling mạnh mẽ để quản lý các Exception(ngoại lệ) phát sinh trong quá trình vận hành ứng dụng. Exception handling giúp xử lý các ngoại lệ, đồng thời trả về thông báo lỗi rõ ràng cho phía client.

Filter

Filters đóng vai trò như các bộ xử lý ngoại lệ Exception chuyên dụng, cho phép tùy chỉnh phản hồi gửi về client khi có exception xảy ra. 

Testing

Testing là giai đoạn quan trọng đảm bảo tính ổn định và độ tin cậy của ứng dụng. NestJS hỗ trợ viết unit tests và integration tests bằng Jest và Supertest, giúp kiểm tra chức năng mã nguồn và ngăn ngừa lỗi khi triển khai.

So sánh NestJS vs ExpressJS

Tính năngNestJSExpress.js
Kiến trúcOpinionatedUnopinionated
Ngôn ngữTypeScript (ngôn ngữ chính), JavaScriptJavaScript
Độ phổ biếnCao (64k+ sao trên GitHub)Cao (63k+ sao trên GitHub)
Hiệu suấtTốt, có thể dùng Express hoặc FastifyTốt, sử dụng lập trình bất đồng bộ
Cấu trúcControllers, Providers, ModulesLinh hoạt, không có cấu trúc cố định
Kiểm thử unitDễ dàng, tích hợp sẵn môi trường thử nghiệm JestCần viết code riêng để kiểm thử
Ứng dụng điển hìnhXây dựng website doanh nghiệp, thương mại điện tử như Adidas, Roche, Trilon,…Ứng dụng Fintech, ứng dụng streaming

Tự học NestJS miễn phí cho người mới bắt đầu

Có rất nhiều nguồn tài liệu miễn phí để học framework NestJS online tại nhà. Dưới đây là một số lựa chọn hàng đầu mà bạn có thể tham khảo để bắt đầu:

  1. Website chính thức của NestJS: Là tài liệu chính thức từ những người tạo ra NestJS, đây là nguồn tài nguyên bắt buộc phải xem đối với bất kỳ ai bắt đầu hành trình với framework này. Website này bao gồm mọi thứ, từ các khái niệm cơ bản đến các chủ đề nâng cao, cung cấp một cách tiếp cận rõ ràng và có cấu trúc để học NestJS.
  2. FreeCodeCamp: Với phương pháp học tập dựa trên dự án, FreeCodeCamp hướng dẫn bạn xây dựng một API CRUD hoàn chỉnh bằng NestJS, giúp củng cố kiến thức thông qua trải nghiệm thực tế.
  3. Các khóa học miễn phí trên nền tảng Udemy/Coursera: Cả Udemy và Coursera đều cung cấp một số khóa học NestJS miễn phí, mang đến những bài giảng video, bài tập thực hành và hướng dẫn từ các chuyên gia. Hãy tìm kiếm kỹ để chọn lựa khóa học phù hợp với trình độ của bạn.
  4. W3Schools.io: Nếu bạn cần một hướng dẫn nhanh gọn và dễ hiểu về các nguyên tắc cơ bản của NestJS, W3Schools.io là một lựa chọn tuyệt vời. Nội dung được trình bày một cách đơn giản, dễ tiếp thu, giúp bạn nắm bắt nhanh chóng các khái niệm cốt lõi.
  5. Mastering Backend: Hướng dẫn chi tiết này tập trung vào sự kết hợp giữa NestJS và TypeScript, cung cấp những kiến thức chuyên sâu về cách tận dụng sức mạnh của cả hai công nghệ này để xây dựng ứng dụng backend hiệu quả.
  6. YouTube: Nền tảng này chứa đựng vô số hướng dẫn NestJS hữu ích từ các kênh như Academind, Net Ninja, và PedroTech. Đây là một cách học tập trực quan và sinh động, giúp bạn tiếp thu kiến thức một cách dễ dàng.

VPS Vietnix: Tốc độ cao và ổn định hàng đầu Việt Nam

Vietnix là một trong những nhà cung cấp VPS hàng đầu với hiệu năng vượt trội và độ ổn định cao. Được tối ưu hóa với ổ cứng NVMe và hạ tầng mạng 10Gbps, dịch vụ VPS của Vietnix mang đến tốc độ xử lý và truy xuất dữ liệu ấn tượng. Vietnix cam kết uptime đến 99.9%, đảm bảo hoạt động liên tục cho mọi ứng dụng. Đội ngũ hỗ trợ kỹ thuật chuyên nghiệp 24/7 luôn sẵn sàng giải quyết mọi vấn đề, mang đến sự an tâm tuyệt đối cho khách hàng.

Thông tin liên hệ:

  • Hotline: 18001093.
  • Email: sales@vietnix.com.vn.
  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
  • Websitehttps://vietnix.vn/.

Câu hỏi thường gặp

Ưu điểm của NestJS là gì?

NestJS tận dụng TypeScript – ngôn ngữ được đánh máy mạnh, là một tập hợp ngôn ngữ JavaScript. NestJS được đánh giá là dễ dàng sử dụng, học hỏi và làm chủ. 
Giao diện dòng lệnh (CLI) mạnh mẽ để tăng năng suất và dễ dàng phát triển. 

NestJS có được sử dụng phổ biến không?

NestJS là một trong những Node.JS phát triển nhanh chóng nhất. Cho đến hôm nay (tháng 8 năm 2019), nó đã có hơn 18 nghìn sao trên GitHub và hơn 91 nghìn lượt tải xuống npm hàng tuần . 

Trên đây là những kiến thức cơ bản nhất về NestJS và các thành phần quan trọng của framework này mà mình muốn chia sẻ tới bạn. Có thể thấy NestJS là một framework cho phép xây dựng các ứng dụng dễ mở rộng, bảo trì và kiểm thử, giúp đơn giản hoá quá trình develop backend. Để tìm hiểu thêm nhiều kiến thức lập trình chuyên sâu, bạn có thể tham khảo một số bài viết dưới đây của mình:

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Đánh giá mức độ hữu ích của bài viết

Thất vọng

Chưa hữu ích

Bình thường

Hữu ích

Rất hữu ích

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Banner group
Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

Icon tab

MAXSPEED HOSTING

TĂNG TỐC WEBSITE TOÀN DIỆN

CÔNG NGHỆ ĐỘC QUYỀN

Vector

PHẦN CỨNG MẠNH MẼ

Vector

HỖ TRỢ 24/7

Vector
ĐĂNG KÝ NGAYGroup icon
khuyến mãi 30 tháng 4
Khi mua Hosting/VPS
16/04/2025 - 16/05/2025
Pattern

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

CẢM ƠN BẠN ĐÃ ĐÁNH GIÁ BÀI VIẾT

Vietnix sẽ luôn cố gắng cải thiện chất lượng dịch vụ mỗi ngày

ĐÓNG

Đánh giá mức độ hữu ích của bài viết

Thất vọng

Chưa hữu ích

Bình thường

Hữu ích

Rất hữu ích

Icon
ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1
Icon
XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG