Bài này giúp bạn tiến hành cài đặt Nest.js và thiết lập một RESTful API đơn giản.
Nest.js là một framework được phát triển dựa trên nền tảng Node.js để giúp cho việc xây dựng ứng dụng được đơn giản hơn và dễ bảo trì hơn. Nest.js giúp cho việc phát triển ứng dụng dễ dàng hơn nhờ vào tính năng Dependency Injection (DI), Middleware, và mô hình modular.
Nest.js sử dụng TypeScript để viết mã, cho phép kiểm tra kiểu dữ liệu trong quá trình phát triển. Điều này giúp cho việc phát triển trở nên dễ dàng hơn và giảm thiểu thời gian debug.
Mặc dù Nest.js có thể được sử dụng để phát triển ứng dụng back-end hoặc full stack, nhưng trong bài hướng dẫn này chúng ta sẽ tập trung vào việc phát triển một RESTful API đơn giản với TypeScript.
Cài đặt Nest.js
Trước tiên, cần cài đặt Node.js từ trang chủ https://nodejs.org/. Sau khi cài đặt xong, chạy command line và cài đặt Nest.js bằng npm:
npm install -g @nestjs/cli
Tạo một project Nest.js
Sau khi cài đặt Nest.js CLI, bạn có thể tạo một project mới bằng cách chạy lệnh:
nest new project-name
Tạo một controller
1. Tạo một controller mới bằng lệnh Nest.js CLI:
nest g controller cats
2. Sửa file `cats.controller.ts` như sau:
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll(): string {
return 'This action returns all cats';
}
}
3. Chạy ứng dụng bằng lệnh
npm run start
4. Truy cập vào địa chỉ http://localhost:3000/cats để xem kết quả trả về.
Tạo một service
1. Tạo một service mới bằng lệnh Nest.js CLI:
nest g service cats
2. Sửa file `cats.service.ts` như sau:
“`typescript
import { Injectable } from '@nestjs/common';
@Injectable()
export class CatsService {
private readonly cats: string[] = [];
create(cat: string) {
this.cats.push(cat);
}
findAll(): string[] {
return this.cats;
}
}
3. Sửa file `cats.controller.ts`:
import { Controller, Get, Post, Body } from '@nestjs/common';
import { CatsService } from './cats.service';
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Post()
async create(@Body() createCatDto: any) {
this.catsService.create(createCatDto.name);
}
@Get()
async findAll(): Promise<string[]> {
return this.catsService.findAll();
}
}
4. Thử nghiệm lại ứng dụng bằng lệnh npm run start và sử dụng POST requests để tạo một con mèo mới và GET requests để lấy danh sách các con mèo.
Thêm một database
1. Cài đặt TypeORM và PostgreSQL
npm install --save @nestjs/typeorm typeorm pg
2. Thêm config cho database vào file app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'password',
database: 'nestjs',
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true,
}),
],
})
export class AppModule {}
3. Tạo một entity mới bằng lệnh Nest.js CLI:
nest g class cat.entity --no-spec
4. Sửa file `cat.entity.ts` như sau:
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Cat {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
age: number;
@Column()
breed: string;
}
5. Thêm một repository cho entity Cat trong file cats.module.ts:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { CatsService } from './cats.service';
import { CatsController } from './cats.controller';
import { Cat } from './cat.entity';
@Module({
imports: [TypeOrmModule.forFeature([Cat])],
providers: [CatsService],
controllers: [CatsController],
})
export class CatsModule {}
6. Sửa file cats.service.ts để sử dụng repository mới:
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Cat } from './cat.entity';
@Injectable()
export class CatsService {
constructor(
@InjectRepository(Cat)
private readonly catRepository: Repository,
) {}
async create(cat: Cat): Promise {
await this.catRepository.insert(cat);
}
async findAll(): Promise<Cat[]> {
return this.catRepository.find();
}
}
7. Sửa file cats.controller.ts để sử dụng service mới:
import { Controller, Get, Post, Body } from '@nestjs/common';
import { CatsService } from './cats.service';
import { Cat } from './cat.entity';
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Post()
async create(@Body() cat: Cat) {
await this.catsService.create(cat);
}
@Get()
async findAll(): Promise<Cat[]> {
return this.catsService.findAll();
}
}
8. Khởi động lại ứng dụng và thử nghiệm lại chức năng.
Kết luận
Trong bài hướng dẫn này, chúng ta đã tìm hiểu về Nest.js và việc sử dụng TypeScript để phát triển một RESTful API. Chúng ta đã tạo một controller và một service để quản lý các con mèo, và sau đó thêm một database cho ứng dụng bằng cách sử dụng TypeORM và PostgreSQL.
Việc phát triển các RESTful API với Nest.js đơn giản và dễ dàng hơn nhờ vào nhiều tính năng hữu ích của framework. Chúng ta hãy tiếp tục khám phá thêm các chức năng của Nest.js để có thể xây dựng những ứng dụng đáng tin cậy và dễ bảo trì.
BÀI TIẾP THEO: RESTful API với Nest.js và TypeORM: tích hợp CRUD với cơ sở dữ liệu.

