Prisma là một ORM hỗ trợ nhiều cơ sở dữ liệu phổ biến; . Khi xây dựng một Node. js kết nối với cơ sở dữ liệu MongoDB, Mongoose là lựa chọn thực tế cho nhiều nhà phát triển
Hôm nay chúng ta sẽ sử dụng Prisma và xem nó làm cho tương tác trở nên đơn giản hơn như thế nào, từ việc xác định lược đồ đến thực hiện các truy vấn tới cơ sở dữ liệu
Những gì chúng ta sẽ xây dựng
Chúng tôi sẽ xây dựng phần phụ trợ của blog cộng đồng nơi người dùng có thể
- Tạo bài viết
- Xem số lượt xem cho một bài đăng
- Bình luận một bài viết
- Upvote hoặc downvote một bình luận
Đây là lược đồ cơ sở dữ liệu của ứng dụng được thiết kế với Moon Modeler
điều kiện tiên quyết
Bạn phải cài đặt các công cụ sau trên máy tính của mình để làm theo hướng dẫn này
- Nút. js 12+ - Liên kết tải xuống
- NPM hoặc Sợi
- MongoDB 4+ với bộ bản sao được định cấu hình. Bạn có thể định cấu hình bộ bản sao theo cách thủ công hoặc sử dụng MongoDB Atlas, cung cấp phiên bản MongoDB miễn phí với bộ bản sao
Tạo một bộ bản sao trong MongoDB với Docker Compose
Hướng dẫn này sẽ chỉ ra cách tạo một bộ bản sao trong MongoDB, sau đó sử dụng Docker soạn thảo để thực hiện thiết lập đơn giản hơn
Tạo dự án
Trong hướng dẫn này, chúng tôi đã xây dựng một dự án khởi động cho Node. js với Typescript và sẽ sử dụng nó để khởi tạo dự án
Chạy lệnh bên dưới
git clone //github.com/tericcabrel/node-ts-starter.git node-prisma-mongo
cd node-prisma-mongo
yarn install
yarn start
Thiết lập Prisma
Bên trong thư mục dự án, cài đặt Prisma CLI
yarn add -D prisma
Khởi tạo Prisma cho dự án của chúng tôi
yarn prisma init
Lệnh này sẽ tạo một lược đồ Prisma và một. env để đặt các biến môi trường để đưa vào ứng dụng
Thay thế nội dung của tệp
yarn add -D prisma
5 bằng mã bên dưới để đặt nhà cung cấp thành MongoDB// This is your Prisma schema file,
// learn more about it in the docs: //pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mongodb"
url = env["DATABASE_URL"]
}
Mở. env và cập nhật URL cơ sở dữ liệu thành chuỗi kết nối của phiên bản MongoDB mà bạn đã tạo trên Atlas
DATABASE_URL="mongodb+srv://:@cluster0.gbgfd.mongodb.net/?retryWrites=true&w=majority"
Replace , , with the credentials of your MongoDB Atlas instance.
Tạo lược đồ cơ sở dữ liệu
Từ hình ảnh của lược đồ cơ sở dữ liệu, chúng tôi có hai bộ sưu tập
yarn add -D prisma
6 và yarn add -D prisma
7Cập nhật tệp
yarn add -D prisma
5 bằng mã bên dưới// This is your Prisma schema file,
// learn more about it in the docs: //pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mongodb"
url = env["DATABASE_URL"]
}
enum Tag {
NodeJS
Java
React
GraphQL
Spring
Typescript
Express
Docker
Jest
Jenkins
AWS
}
type Location {
address String
city String
country String
}
type Comment {
text String
voteCount Int
createdAt DateTime @default[now[]]
updatedAt DateTime @updatedAt[]
}
model User {
id String @id @default[auto[]] @map["_id"] @db.ObjectId
email String
dateOfBirth DateTime
name String
location Location[]
createdAt DateTime @default[now[]]
updatedAt DateTime @updatedAt[]
@@unique[[email]]
@@map["users"]
}
model Post {
id String @id @default[auto[]] @map["_id"] @db.ObjectId
title String
content String
viewCount Int
isPublished Boolean
tags Tag[]
createdAt DateTime @default[now[]]
updatedAt DateTime @updatedAt[]
comments Comment[]
author User @relation[fields: [authorId], references: [id]]
authorId String @db.ObjectId
@@index[[author]]
@@map["posts"]
}
Tạo các loại từ lược đồ
Trước tiên, chúng tôi sẽ cài đặt ứng dụng khách Prisma cung cấp API để dễ dàng thực hiện các truy vấn cơ sở dữ liệu từ các mô hình của bạn.
yarn add @prisma/client
Bây giờ chúng ta sẽ tạo các kiểu từ lược đồ Prisma
yarn prisma generate
Lệnh trên tạo các loại được xác định trong thư mục
yarn add -D prisma
9 và @prisma/client nhập các loại nàyChèn dữ liệu
Chèn dữ liệu bao gồm tạo Người dùng và Bài đăng. Trong thư mục
yarn prisma init
0, hãy tạo một tệp yarn prisma init
1 và thêm mã bên dướiimport { PrismaClient, Tag, Prisma } from '@prisma/client';
const prisma = new PrismaClient[];
export const insertUserAndPost = async [] => {
const userInput: Prisma.UserUncheckedCreateInput = {
email: 'jon.snow@got.com',
name: 'Jon Snow',
dateOfBirth: new Date[1995, 1, 23],
location: {
address: "2 Rue de l'opera",
city: 'Paris',
country: 'FRA',
},
};
const createdUser = await prisma.user.create[{
data: userInput,
}];
const commentsInput: Prisma.CommentCreateInput[] = [
{
text: 'My first comment',
voteCount: 14,
updatedAt: new Date[],
},
];
const postInput: Prisma.PostUncheckedCreateInput = {
authorId: createdUser.id,
comments: commentsInput,
content: 'My first post text content',
isPublished: false,
tags: [Tag.NodeJS, Tag.Docker, Tag.GraphQL],
title: 'My first post title',
viewCount: 23,
};
const createdPost = await prisma.post.create[{
data: postInput,
}];
console.log[createdUser];
console.log[createdPost];
};
insertUserAndPost[].then[];
Chạy lệnh bên dưới để thực thi tệp
yarn ts-node src/insert-data.ts
Chúng tôi đã nhận được đầu ra sau
Thêm bình luận vào bài viết
Nhận xét là con của một bài đăng, còn được gọi là. Làm cách nào để thêm nhận xét mới vào bài đăng hiện có bằng Prisma Client?
Nối mã bên dưới vào tệp
yarn prisma init
1yarn add -D prisma
0Làm sạch cơ sở dữ liệu của bạn trước khi chạy lại mã;
Chạy lại
yarn prisma init
3 và chúng tôi nhận được đầu ra sauKhôi phục dữ liệu
Dưới đây là một số câu truy vấn để lấy dữ liệu từ cơ sở dữ liệu, tạo một tệp
yarn prisma init
4 và thêm mã bên dướiyarn add -D prisma
1Chạy lệnh
yarn prisma init
5Cập nhật dữ liệu
Tạo một tệp
yarn prisma init
6 và thêm mã bên dướiyarn add -D prisma
2Xóa dữ liệu
Việc xóa dữ liệu khá đơn giản với ứng dụng khách Prisma;
yarn add -D prisma
3Lưu ý về ràng buộc toàn vẹn
Một trong những điểm khác biệt chính giữa NoSQL và cơ sở dữ liệu quan hệ là ràng buộc thực thi tính toàn vẹn đối với cơ sở dữ liệu sau. Nếu bạn cố xóa một người dùng là tác giả của một số bài đăng, hành động sẽ không thành công vì bạn nên xóa tất cả các bài đăng của anh ấy trước
Trong cơ sở dữ liệu NoSQL, việc xóa sẽ thành công, nhưng khi sử dụng Prisma, hành vi của cơ sở dữ liệu quan hệ được sao chép khi bạn xác định mối quan hệ giữa người dùng và Bài đăng
Để xóa một người dùng với tất cả các bài đăng của anh ấy, hãy cập nhật mối quan hệ trên lược đồ Prisma để cho phép xóa theo tầng
yarn add -D prisma
4Gói [lại
Nếu bạn đã từng sử dụng Prisma trên cơ sở dữ liệu quan hệ, bạn sẽ nhận ra cách sử dụng với cơ sở dữ liệu NoSQL không có gì khác biệt. Điều này thật tuyệt vì bằng cách giữ nguyên mô hình tinh thần bất kể bạn sử dụng cơ sở dữ liệu nào
- Bạn không cần các ORM khác cho cơ sở dữ liệu SQL và NoSQL
- Không tải nhận thức khi viết cú pháp khác nhau tùy thuộc vào công cụ cơ sở dữ liệu
- Việc di chuyển từ cơ sở dữ liệu SQL sang cơ sở dữ liệu NoSQL hoặc ngược lại yêu cầu ít thay đổi hơn trong cơ sở mã
Bạn có thể tìm mã nguồn trên kho lưu trữ GitHub
Theo dõi tôi trên Twitter hoặc đăng ký nhận bản tin của tôi để tránh bỏ lỡ các bài đăng sắp tới cũng như các mẹo và thủ thuật mà tôi thỉnh thoảng chia sẻ