NestJs với prisma restapi

NestJs với prisma restapi

Tags
NestJs
Prisma
Published
January 20, 2022

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
notion image

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
notion image
notion image