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
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
// 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”