NestJS: Dạo đầu cùng đồng bọn

Dung Tran
3 min readMay 13, 2019

--

Sau khi đã bôi trơn cùng NestJS thì chúng ta sẽ bắt đầu trải nghiệm sự thú vị của nó.

Trong bài này, tôi sẽ trình bày các bước cơ bản để chúng ta có thể dễ dàng tiếp cận với NestJS.

Trước hết chúng ta hãy tạo một project với NestJS

Dựa trên CLI

$ npm i -g @nestjs/cli

hoặc

$ yarn global add @nestjs/cli$ nest new my-app$ cd my-app$ yarn && yarn start

Dựa trên boilerplate

NestJS cũng hỗ trợ 2 boilerplate cho cả TypeScript và Javascript

Bạn có thể clone hoặc fork 2 repo sau:

TypeScript: https://github.com/nestjs/typescript-starter

JavaScript: https://github.com/nestjs/javascript-starter

Các boilerplate này cũng được support trên vài IDE online như

Codesandbox: https://codesandbox.io/s/8lrzkw508j

https://codesandbox.io/embed/github/nestjs/typescript-starter/tree/master/?fontsize=14

Sau khi tạo xong một NestJS project thì project có cấu trúc như hình bên dưới

Cấu trúc thư mục của NestJS

Tạo một module cho NestJS

Khi tạo xong một project NestJS thì chúng ta sẽ có một application và một root module. Khi bắt đầu bôi trơn chúng ta cũng đã biết NestJS thích hợp cho việc xây dựng microservices kết hợp kiến trúc modularity.

Các module con sẽ được import vào trong root modules. Mỗi module sẽ đảm nhiệm những vai trò, chức năng khác nhau. Trong mỗi module đó có thể chia thành những module nhỏ theo nhu cầu của từng service.

Và bây giờ chúng ta sẽ tiếp tục việc tạo ra một module trong NestJS. Thông qua cli chúng ta có thể tạo ra các module mẫu

$ nest generate module user-module
Cấu trúc thư mục sau khi tạo module
// user-module.module.tsimport { Module } from ‘nestjs/common’;@Module({})export class UserModule{} 

Và class UserModule được import vào AppModule (root) như hình bên dưới:

//app.module.tsimport { Module } from ‘@nestjs/common’;
import { AppController } from ‘./app.controller’;
import { AppService } from ‘./app.service’;
import { UserModuleModule } from ‘./user-module/user-module.module’;
@Module({
imports: [UserModuleModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}

Đến đây chúng ta đã tạo được module cho NestJS nhưng đây là một module rỗng không có bất kỳ controller hay provider nào cả. Giờ ta sẽ tạo controller và provider cho user module

$ cd src/user-module$ nest generate provider user-service$ nest generate controller user-controller

Tiếp theo ta sẽ edit nội dung của module, service và controller

// user-module.module.tsimport { Module } from ‘@nestjs/common’;
import { UserService } from ‘./user-service’;
import { UserControllerController } from ‘./user-controller/user-controller.controller’;
@Module({
providers: [UserService],
controllers: [UserControllerController]
})
export class UserModuleModule {}

Chúng ta tạo một provider là service cho user module. Trong đó, chúng ta sẽ dùng @Injectable để cho phép các injector sử dụng.

// user-service.ts
import { Injectable } from ‘@nestjs/common’;
@Injectable()
export class UserService {
getUser(){
return “User”;
}
}

File user controller đóng vai trò như một router trong ExpressJS. Trong đó, ‘user-controler’ là route name , @Get là method GET và getUser là hàm xử lý request .Class UserService được inject vào trong constructor và được gọi trong hàm getUser.

// user-controller.controller.tsimport { Controller,Get } from '@nestjs/common';import {UserService} from '../user-service';@Controller('user-controller')
export class UserControllerController {
constructor(private readonly service:UserService){}
@Get()
getUser(){
return this.service.getUser()
}
}

Đến đây khi truy cập vào http://localhost:3000/user-controller sẽ trả về “User”

--

--