Nest.js là gì? Hướng dẫn cài đặt và sử dụng cho Angular

nest.js là gì
Trong bài viết ngày hôm nay, chúng tôi sẽ giới thiệu các bạn về Nest.js và cách dùng công cụ này cho nền tảng Angular, và tối ưu cho TypeScript.

Vậy Nest.js là gì?

Nest.js là framework Node nguồn mở, viết bằng TypeScript và Kamil Mysliwiec, có nhiều điểm cốt lõi tương đồng với Angular. Nest.js được dùng cho server side và còn có thể build nhiều ứng dụng web doanh nghiệp một cách hiệu quả.
Nest.js kết hợp các khái niệm về Object Oriented Programming, Functional ProgrammingFunctional Reactive Programming hàng đầu
Nest.js có rất nhiều tính năng như:
  • Khả năng mở rộng: Nhờ kiến trúc mô đun, Nest cho phép bạn sử dụng các thư viện hiện có khác cho project của mình.
  • Kiến trúc: Nest có cấu trúc thiết kế cho projet, đam lại khả năng kiểm tra dễ dàng, khả năng mở rộng và khả năng bảo trì cao.
  • Tính linh hoạt: Nest cung cấp một hệ sinh thái để xây dựng tất cả các loại ứng dụng cho server side.
  • Tính tiến bộ: Nest sử dụng các tính năng JavaScript mới nhất và triển khai các giải pháp và mẫu thiết kế hoàn thiện trong phát triển phần mềm.
  • Vì dùng TypeScript và các khái niệm nền của Angular, Angular developer có thể học Nest.js rất nhanh, và viết được ngay backend cho Angular app mà không cần dùng đến các server-side framework khác..
Về cốt lõi, Nest.js tận dụng các thư viện ổn định đã và đang được nhiều Node.js developer sử dụng, như Express.js và TypeORM.
Express là web framework tối giản và nhanh cho Node.js, cung cấp nhiều tiện ích HTTP giúp bạn build  các REST API mạnh mẽ thật dễ dàng và nhanh chóng. Về phần TypeORM, đây là ORM (Object Relational Mapper) ổn định nhất hiện nay cho ngôn ngữ TypeScript và JavaScript hiện đại. Nó có hỗ trợ cho cả hai mẫu Active Record và Data Mapper, cho phép bạn xây dựng các ứng dụng chất lượng cao, loose couple, có thể mở rộng và có thể bảo trì trên các hệ thống cơ sở dữ liệu phổ biến nhất hiện có như MySQL, PostgreQuery và Oracle.

Trước Khi Sử Dụng

Để bắt đầu với Nest.js, bạn cần một vài điều kiện tiên quyết như sau:
  • Node.js và NPM đã được cài đặt trên hệ thống, bạn có thể cài đặt cả hai từ trang web chính thức hoặc làm theo hướng dẫn trong documentation của hệ thống bạn đang sử dụng.
  • Khả năng làm việc thành thạo bằng TypeScript. Nếu đã có kinh nghiệm develop với Angular, chắc hẳn điều kiện này sẽ là hiển nhiên, vì Angular dựa trên TypeScript mà.

Cài đặt Nest CLI

Nest CLI là một tiện ích giao diện dòng lệnh, cho phép bạn nhanh chóng tạo project từ với các base files và dependencies cần thiết. Với Nest CLI, bạn cũng có thể cấu trúc nhiều artifacts khác nhau như components và modules; serving cho app đang develop và xây dựng app cuối cùng sẵn sàng cho production. Nest CLI dựa trên pakage Angular Devkit và sử dụng nodemon để xem các thay đổi trên file.
Hãy bắt đầu bằng cách cài đặt Nest CLI. Mở new terminal  và chạy lệnh sau:
npm install -g @nestjs/cli
Lưu ý: bạn có thể sẽ phải thêm sudo trước lệnh (với macOS và Debian) hoặc dùng thêm CMD prompt (với Windows). Nếu không phải là superuser mà vẫn muốn cài đặt globally, bạn cần chỉnh sửa quyền npm trước.
Sau khi cài đặt CLI, bạn đã có thể nhanh chóng tạo project Nest.js và develop ngay rồi.

Tạo Nest Project trong Nest.js

Sau khi cài đặt CLI, bạn có thể sử dụng nó để nhanh chóng tạo project. Sau khi cài đặt CLI, mở terminal chạy lệnh sau:
nest new firstnestproject
CLI sẽ hỏi bạn một số thông tin về dự án của bạn, chẳng hạn như description, version và tác giả. Bạn có thể thêm các chi tiết này hoặc chỉ để trống và nhấn Enter.
CLI sẽ tạo ra một loạt các tệp và thư mục sau đó nhắc bạn về package manager bạn muốn sử dụng với dự án của mình. Bạn có thể chọn npm hoặc yarm, trong hướng dẫn này chúng ta sẽ dùng npm.
Sau khi cài đặt thành công các dependencies cần thiết, hãy điều hướng đến thư mục gốc của dự án và chạy lệnh sau để khởi động live-load server dựa trên nodemon:
npm run start:dev
Bạn có thể sử dụng trình duyệt web truy cập server Nest tại địa chỉ http://127.0.0.1:3000/. Thời điểm nay, page sẽ chỉ hiển thị Hello World!.
Bạn có thể để máy chủ chạy và mở terminal chạy lệnh khác mà chúng tôi sẽ đề cập trong bài hướng dẫn này.

Cấu Trúc Của Project

Nest.js project đã tạo sẽ có cấu trúc định sẵn cùng nhiều tối ưu giúp bạn test, scale và maintain dễ dàng hơn. Hãy cùng tìm hiểu chi tiết hơn nhé.
Dưới đây là screenshot cấu trúc của project:
Nest.js project structure
Project gồm folder node_modules và file package.json, thành phần cần thiết cho bất kỳ project Node.js nào. Đồng thời, bạn còn có thể thấy:
  • File tsconfig.json giúp tùy chỉnh TypeScript
  • File nodemon.json giúp tùy chỉnh nodemon
  • File tslint.json giúp lint TypeScript
  • nest-cli.json giúp tùy chỉnh CLI
  • Folder src/ chứa code của project
  • Folder test/ chứa file test.

Tạo Nest Module

Nest.js project theo kiến trúc module. Wikipedia, modular programing có định nghĩa như sau:
Modular programming là một kỹ thuật thiết kế phần mềm, nhấn mạnh việc tách chức năng của chương trình thành các module độc lập, có thể hoán đổi cho nhau, sao cho mỗi module chứa mọi thứ cần thiết để chỉ thực hiện một khía cạnh của chức năng mong muốn.
Trong Nest.js, bạn có thể tạo một module dưới dạng TypeScript class, được chú thích bằng decorator @Module(), cung cấp metadata để sắp xếp cấu trúc của ứng dụng.
Dưới đây là hình ảnh từ trang web chính thức của Nest.js về cách các module có thể được cấu trúc trong một ứng dụng:
Nest.js Modules
Mỗi ứng dụng Nest.js có ít nhất một module, gọi là root module.
Bạn có thể tạo module bằng CLI, thông qua lệnh nest generate module. Hãy thử thực hành tạo module cho project của mình nhé. Quay trở lại terminal, đảm bảo rằng bạn đã được điều hướng đến thư mục gốc của dự án và chạy lệnh sau:
nest generate module example


Lệnh này sẽ tạo file src/example/example.module.ts và update file src/app.module.ts với module vừa tạo.
Nếu mở file module lên, ta sẽ nhận được nội dung sau với module Nest cơ bản:
import { Module } from '@nestjs/common';


@Module({})
export class ExampleModule {}


Đây là một class TypeScript đơn giản, đi kèm với decorator @Module() nhận được từ package @nestjs/common.
Giờ đây nếu bạn mở module ứng dụng chính trong file src/app.module.ts, bạn sẽ thấy module đã được import:
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ExampleModule } from './example/example.module';


@Module({
  imports: [ExampleModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
ExampleModule được import từ đường dẫn ./example/example.module và được thêm vào array imports.

Tạo Nest Controller

Trong Nest.js, controller được sử dụng để xử lý các yêu cầu HTTP từ bên ngoài và kết quả trả về. Chúng được map đến route.
Bạn có thể tạo controller bằng cách define một class TypeScript và sử dụng decorator @Contoder ().
Trong terminal, chạy lệnh sau để tạo controller
nest generate controller example/example


Chúng ta đã tạo một controller tên example và đặt tiền tố tên với đường dẫn example/, tiền tố này sẽ chỉ đạo CLI gán controller này làm một phần của module example mà ta đã tạo trước đó.
Mở tệp src/example/example/example.contler.ts, bạn sẽ thấy đoạn mã sau:
import { Controller } from '@nestjs/common';


@Controller('example')
export class ExampleController {}


Nếu mở file src/example/example.module.ts, bạn sẽ thấy controller đã được import và có sẵn trong array imports của module example:
import { Module } from '@nestjs/common';
import { ExampleController } from './example/example.controller';


@Module({
  imports: [ExampleModule],
  controllers: [ExampleController]
})
export class ExampleModule {}
Cùng quay lại controller example và tạo vài route. Mở lại file src/example/example/example.controller.ts và thêm các import sau:
import { Get, Post, Body } from  '@nestjs/common';
Tiếp đến, hãy add medthod index():
   @Get()
    index() {
      return "Example Controller!";
    }


Ta sẽ decorate method bằng decorator @Get() để tạo route nhận lệt GET và trả kết quả là đoạn text Example Controller!. Ta có thể truy cập route này từ URL 127.0.0.1:3000/example. Tại đây, bạn sẽ thấy trang rỗng với đoạn text Example Controller!.
Tiếp theo, hãy add route để chấp nhận POST request. Add method sau:
   @Post('echo')
    echo(@Body() data): any {
        return data;
    }  


Ta sẽ tạo route example/echo để nhận object JSON và trả kết quả. Dùng decorator @Body() để trích xuất body từ respond. Dùng client REST API (cURL hoặc Postman etc.), bạn có thể gửi POST request cùng một vài data đến URL 127.0.0.1:3000/example/echo và nhận lại data. Như ví dụ dưới đây:
Nest.js POST response

Lời kết


Trong bài viết này, chúng ta đã được giới thiệu về framework Nest.js cho lập trình Angular. Chúng ta cũng đã làm quen với Nest CLI, cài đặt Nest CLI và tạo thử project với rất nhiều artifact như modules and controllers. Để tìm hiểu sâu hơn về các khái niệm khác, bạn có thể tìm đọc tài liệu chính thức.

Nhận xét

Bài đăng phổ biến