Site icon 2k1

NestJs với prisma restapi

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:

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
Exit mobile version