Trong bài viết này mình sẽ hướng dẫn setup một ứng dụng CRUD cơ bản dùng ElysiaJs. Mình cũng chả benmark làm gì đâu vì nó cũng nhanh hơn các cái khác rồi.
Yêu cầu cần có:
- Máy tính được cài đặt bun phiên bản mới nhất (để tránh lỗi)
- Máy tính đã được cài đặt Mysql (hướng dẫn cài đặt)
Ok chỉ thế là đủ và chúng ta có thể bắt đầu:
Setup
Tất cả những gì chúng ta cần để bắt đầu là bun create để cấu hình Elysia server
bun create elysia elysia-prisma cd elysia-prisma
Ở đây elysia-prisma là tên dự án của bạn, sau khi chạy xong sẽ tạo ra thư mục với tên bạn vừa đặt.
Ngay bây giờ bên trong thư mục dự án của chúng ta cần cài đặt thư viện prisma.
bun add -d prisma
Sau khi cài đặt prisma xong thì chúng ta setup prisma project với lệnh sau
bunx prisma init
Sau khi chạy xong thì sẽ có một vài file mới được tạo ra. Bước kế tiếp cần định nghĩa các bảng và cấu hình cơ bản cho prisma.
// 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 = "mysql" url = env("DATABASE_URL") } model post { id Int @id @default(autoincrement()) title String path String @unique content String }
Ở đây trong hướng dẫn này mình sẽ sửa dụng mysql và url tới database mình sẽ cấu hình trong file biến môi trường (.env)
Nội dung file .env của mình sẽ như sau
# Environment variables declared in this file are automatically made available to Prisma. # See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema # Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. # See the documentation for all the connection string options: https://pris.ly/d/connection-strings DB_TYPE=mysql DB_HOST=localhost DB_PORT=<your port db your local> DB_USER=root DB_PASS=<your db password> DB_NAME=myblog DATABASE_URL=${DB_TYPE}://${DB_USER}:${DB_PASS}@${DB_HOST}:${DB_PORT}/${DB_NAME} API_PORT=3000
Sau khi setup xong chạy lệnh sau để đồng bộ các thay đổi vào trong Mysql
bunx prisma migrate dev --name init
Tiếp theo trong thư mục src/index.ts thay đổi nội dung file như sau:
import { PrismaClient } from "@prisma/client"; import { Elysia } from "elysia"; interface Post { id?: number title: string path: string content: string } const prisma = new PrismaClient({ log: ['info', 'warn', 'error'] }) const app = new Elysia().decorate('db', prisma) app.get('/posts', ({db}) => { return db.post.findMany() }) app.get('/posts/:id', ({db, params}) => { return db.post.findUnique({ where: { id: Number(params.id) } }) }) app.get('/posts/path/:path', ({db, params}) => { return db.post.findUnique({ where: { path: String(params.path) } }) }) app.post('/post', ({db, body}) => { return db.post.create({ data: body as Post }) }) app.put('/post/:id', ({db, params, body}) => { return db.post.update({ where: { id: Number(params.id)}, data: body as Post }) }) app.delete('/post/:id', ({db, params}) => { return db.post.delete({ where: { id: Number(params.id)} }) }) app.listen(process.env.API_PORT || 3000, () => { console.log(`🚀 ~ app.listen on port: ${app.server?.port}`) })
Bạn có thể mở postman ra để call thử API.
Bonus
Thêm swagger để nhìn API một cách dễ dàng hơn
bun add @elysiajs/swagger
Update file src/index.ts sử dụng swagger
const app = new Elysia().decorate('db', prisma).use(swagger())
Bài viết này là bài lab mình làm và viết lại để note đỡ quên nếu nó hữu ích thì anh em share họ tui cái nhé hoặc bookmark nó lại để đón chờ bài viết sau.
Reference
Link source github: tại đây