☰ Mục lục series
Tài liệu NestJS tiếng Việt
  1. Nhập môn (Overview)
    1. Giới thiệu
    2. First steps
    3. Controllers
    4. Providers
    5. Modules
    6. Middleware
    7. Exception filters
    8. Pipes
    9. Guards
    10. Interceptors
    11. Custom decorators
  2. Nền tảng (Fundamentals)
    1. Custom providers
    2. Asynchronous providers
    3. Dynamic modules
    4. Injection scopes
    5. Circular dependency
    6. Module reference
    7. Lazy-loading modules
    8. Execution context
    9. Lifecycle events
    10. Discovery service
    11. Platform agnosticism
    12. Testing
  3. Kỹ thuật (Techniques)
    1. Configuration
    2. Database (SQL)
    3. MongoDB
    4. Validation
    5. Caching
    6. Serialization
    7. Versioning
    8. Task scheduling
    9. Queues
    10. Logging
    11. Cookies
    12. Events
    13. Compression
    14. File upload
    15. Streaming files
    16. HTTP module
    17. Session
    18. MVC
    19. Performance (Fastify)
    20. Server-Sent Events
  4. Bảo mật (Security)
    1. Authentication
    2. Authorization
    3. Encryption & Hashing
    4. Helmet
    5. CORS
    6. CSRF
    7. Rate limiting
    8. Vòng đời request
  5. OpenAPI (Swagger)
    1. Introduction
    2. Types and parameters
    3. Operations
    4. Security
    5. Mapped types
    6. Decorators
    7. CLI plugin
    8. Other features
  6. Recipes
    1. REPL
    2. CRUD generator
    3. SWC (fast compiler)
    4. Passport (auth)
    5. Hot reload
    6. MikroORM
    7. Router module
    8. Health checks (Terminus)
    9. CQRS
    10. Prisma
    11. Serve static
    12. Commander
    13. Async local storage
  7. WebSockets
    1. Gateways
    2. Exception filters
    3. Pipes
    4. Guards
    5. Interceptors
    6. Adapters
  8. Microservices
    1. Overview
    2. Redis
    3. MQTT
    4. NATS
    5. RabbitMQ
    6. Kafka
    7. gRPC
    8. Custom transporters
    9. Exception filters
    10. Pipes
    11. Pre-request hooks
    12. Guards
    13. Interceptors
  9. GraphQL
    1. Quick start
    2. Resolvers
    3. Mutations
    4. Subscriptions
    5. Scalars
    6. Directives
    7. Interfaces
    8. Unions and enums
    9. Field middleware
    10. Mapped types
    11. Plugins
    12. Complexity
    13. Extensions
    14. CLI plugin
    15. Generating SDL
    16. Sharing models
    17. Other features
    18. Federation
  10. CLI & triển khai
    1. CLI overview
    2. Workspaces
    3. Libraries
    4. Usage
    5. Scripts
    6. Deployment
    7. Standalone apps
  11. FAQ
    1. Serverless
    2. HTTP adapter
    3. Keep-Alive connections
    4. Global path prefix
    5. Raw body
    6. Hybrid application
    7. HTTPS & multiple servers
    8. Common errors
  12. Phụ lục
    1. Bảng thuật ngữ
Nhập môn (Overview)

Giới thiệu

Bản dịch từ docs.nestjs.com/

Nest (NestJS) là một framework để xây dựng các ứng dụng server-side Node.js hiệu quả, có khả năng mở rộng. Nó sử dụng JavaScript hiện đại (progressive JavaScript), được xây dựng và hỗ trợ đầy đủ TypeScript (nhưng vẫn cho phép developer code bằng JavaScript thuần), đồng thời kết hợp các yếu tố của OOP (Lập trình hướng đối tượng), FP (Lập trình hàm) và FRP (Lập trình phản ứng theo hàm).

Bên dưới, Nest sử dụng các HTTP server framework mạnh mẽ như Express (mặc định) và có thể tùy chọn cấu hình để dùng Fastify!

Nest cung cấp một lớp trừu tượng nằm trên các framework Node.js phổ biến này (Express/Fastify), nhưng đồng thời cũng expose trực tiếp API của chúng cho developer. Điều này giúp developer tự do sử dụng vô số module bên thứ ba có sẵn cho nền tảng bên dưới.

Ghi chú người dịch Việc vẫn truy cập được API gốc của Express/Fastify tương tự cách Gin hay Fiber ở Go vẫn expose http.Request/http.ResponseWriter, hay Laravel vẫn cho bạn động tới Request object của Symfony khi cần - lớp trừu tượng của Nest chỉ là tiện ích mặc định, không khóa bạn lại khi cần thao tác thấp hơn.

Triết lý

Trong những năm gần đây, nhờ Node.js, JavaScript đã trở thành “ngôn ngữ chung” của web cho cả ứng dụng frontend lẫn backend. Điều này đã làm nảy sinh những dự án tuyệt vời như Angular, React và Vue, giúp cải thiện năng suất của developer và cho phép tạo ra các ứng dụng frontend nhanh, dễ test và dễ mở rộng. Tuy nhiên, dù có rất nhiều thư viện, helper và công cụ xuất sắc dành cho Node (và JavaScript server-side), không có công cụ nào thực sự giải quyết được vấn đề cốt lõi: kiến trúc (architecture).

Nest cung cấp một kiến trúc ứng dụng có sẵn (out-of-the-box), cho phép developer và team tạo ra các ứng dụng dễ test, có khả năng mở rộng, loosely coupled (ít phụ thuộc chặt chẽ vào nhau) và dễ bảo trì. Kiến trúc này được lấy cảm hứng mạnh mẽ từ Angular.

Ghi chú người dịch Đây là khác biệt lớn nhất so với Express thuần: Express không áp đặt cách tổ chức code, còn Nest bắt bạn theo mô hình module - controller - provider với một DI container quản lý vòng đời object. Nếu bạn quen tự new service rồi truyền tay qua constructor như ở Go, đây chính là phần Nest tự động hóa giúp bạn.

Cài đặt

Để bắt đầu, bạn có thể scaffold (khởi tạo) project bằng Nest CLI, hoặc clone một starter project (cả hai cách đều cho ra kết quả giống nhau).

Để scaffold project bằng Nest CLI, hãy chạy các lệnh sau. Lệnh này sẽ tạo một thư mục project mới, và điền vào thư mục đó các file cốt lõi ban đầu của Nest cùng các module hỗ trợ, tạo ra một cấu trúc nền tảng theo convention cho project của bạn. Tạo project mới bằng Nest CLI là cách được khuyến nghị cho người mới bắt đầu. Chúng ta sẽ tiếp tục theo hướng này ở phần First Steps.

$ npm i -g @nestjs/cli
$ nest new project-name

Lựa chọn khác

Ngoài ra, bạn có thể cài đặt TypeScript starter project bằng Git:

$ git clone https://github.com/nestjs/typescript-starter.git project
$ cd project
$ npm install
$ npm run start

Gợi ý Nếu bạn muốn clone repository mà không cần lịch sử git, bạn có thể dùng degit.

Mở trình duyệt và truy cập http://localhost:3000/.

Để cài đặt phiên bản JavaScript của starter project, hãy dùng javascript-starter.git trong chuỗi lệnh phía trên.

Bạn cũng có thể bắt đầu một project mới từ đầu bằng cách cài đặt các package cốt lõi và hỗ trợ. Lưu ý rằng bạn sẽ cần tự thiết lập các file boilerplate của project. Tối thiểu, bạn cần các dependency sau: @nestjs/core, @nestjs/common, rxjs, và reflect-metadata. Tham khảo bài viết ngắn này về cách tạo một project NestJS tối giản từ đầu: 5 steps to create a bare minimum NestJS app from scratch!.

Nội dung gốc: NestJS Documentation © Kamil Myśliwiec, giấy phép MIT. Bản dịch và ghi chú: Lê Văn Dũng.