Tạo một ứng dụng nest mới
Cài đặt Nodejs
Kiểm tra phiên bản nodejs hiện tại
λ node -v
v16.13.0
Nếu mấy chưa cài NodeJs thì có thể vào trang chủ nodejs và download về. Nên chọn bản LTS để ổn định hơn
Cài đặt NestJs/CLI
Cài đặt nestjs/cli bằng npm
npm install -g @nestjs/cli
Tạo một nest application mới
cú pháp nest new tên_project
Lưu ý:
Khi nó hiện câu hỏi Which package manager would you ❤️ to use?
thì hãy chọn npm
Với yarm mình chưa thử nhưng pnpm thì khi dùng với prisma sẽ lỗi nên cứ chọn npm
nest new nest-prisma-tutorial
Cài đặt prisma
Cài đặt prisma package
npm install prisma --save-dev
Khởi tạo prisma
npx prisma init
Cấu hình database
schema.prisma
File này sẽ chứa các model
datasource
Cái này để kết nối với csdl
provider
Loại cơ sở dữ liệu muốn kết nối
url
Đường dẫn csdl (Lấy từ file env
)
env
DATABASE_URL="file:./db.sqlite"
// This is your Prisma schema file,
// learn more about it in the docs: <https://pris.ly/d/prisma-schema>
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
Như vậy chúng ta đã hoàn thành kết nối prisma với csdl
Viết model
Chúng ta sẽ định nghĩa model ở trong file schema.prisma
Đây là model có tên là Task
gồm thuộc tính:
- id: tự động tăng
- title: chuỗi
- comleted: boolean
model Task {
id Int @id @default(autoincrement())
title String
completed Boolean
}
Tạo nest module mới
Tạo module task
Module này sẽ tự import vào app.module.ts
nest g module task
Tạo controller task
controller sẽ được import vào task.module.ts
⇒ Xử lý các request từ người dùng
nest g comtroller task
Tạo service task
service sẽ được import vào task.module.ts
⇒ Viết các thao tác xử lý với cơ sở dữ liệu
nest g service task
Viết task service
import { Injectable, ParseIntPipe } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
@Injectable()
export class TaskService {
create(title, completed) {
prisma.task.create({
data: {
title: title,
completed: completed ? true:false,
},
}).then(res=>{
return res
});
// return 'create services';
}
get() {
const dt = prisma.task.findMany({
select:{
title: true,
completed: true
}
})
return dt
}
getOne(id){
const dt = prisma.task.findFirst({
where:{
id: id
}
})
return dt
}
}
Viết task controller
Khởi tạo service
constructor(private readonly taskService: TaskService) {}
Sau khi khởi tạo ta có thể dùng các hàm trong service để xử lý
import { Body, Controller, Get, Param, ParseIntPipe, Post } from '@nestjs/common';
import { TaskService } from './task.service';
@Controller('task')
export class TaskController {
constructor(private readonly taskService: TaskService) {}
@Get()
getTask() {
return this.taskService.get();
}
@Get('/:id')
getOne(@Param('id', ParseIntPipe) id:number) {
return this.taskService.getOne(id);
}
@Post()
createTask(@Body() body) {
const { title, completed } = body;
this.taskService.create(title, body);
return 'Task is created';
}
}
Chạy và test thử
Chạy ta dùng lệnh
npm run start:dev