在 Next 中, ORM 框架 Prisma 使用
Prisma 介绍
Prisma 是一个 ORM 框架,主要用于 Node.js 或 TypeScript 作为后端开发的应用,主要有三部分组成:
- Prisma Client:自动生成且类型安全的查询构建器,适用于 Nodex.js 和 TS;
- Prisma Migrate: 迁移系统,当项目 Model 结果或字段发生变化后,可以将数据自动映射到 DB ,进行对应更新
- Prisma Studio GUI 界面,用于查看和编辑 DB 中的数据
日常开发中最常用 为 Prisma Client ,Prisma 支持关系型数据库如MySQL、PostgreSQL,及非关系型数据库 MongoDB 等
Prisma 使用
1,安装 Prisam 命令行
npm install prisma --save-dev
2,prisma 初始化
2.1,借助 Prisma CLI 的 init
命令配置 Prisma ,进行初始化;在 t项目根目录文件夹下,输入以下命令
npx prisma init --datasource-provider mongodb
这里将 mongo 作为配置的 DB 数据库;命令执行后,程序将会自动生成一个 prisma
文件夹,在 prisma
文件夹下会有一个 schema.prisma
文件用将 MongoDB
配置为项目的 DB
// 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 = "mongodb"
url = env("DATABASE_URL")
}
2.2,创建一个 .env
文件,将 mongodb
的链接地址赋值给 DATABASE_URL
环境变量,如下
DATABASE_URL="mongodb://root:example@localhost:27017/db_next?authSource=admin"
2.3 在 schema.prisma
文件中,定义应用中需要用到 Model ,如下:
model Post {
id String @id @default(auto()) @map("_id") @db.ObjectId
title String
userId String @db.ObjectId
user User @relation(fields: [userId], references: [id])
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String
posts Post[]
}
2.4,执行 npm install @prisma/client
,安装 @prisma/client
包
2.5,调用 npx prisma generate
更新一个新的版本Prisma Client 用于当前模型
3,借助 Prisma Client
创建 Query 语句,进行数据 读写;
为了测试 Prisma Client 连通性,可以创建一个 ts 脚本,分别执行以下代码,查看终端运行结果
// lib/index.ts 文件
const prisma = new PrismaClient()
// 读操作
async function main() {
// 下入客户端
const allUsers = await prisma.user.findMany()
console.log('result is ', allUsers)
}
main()
.catch(async (e) => {
console.error(e)
console.log('报错error is ', e)
})
.finally(async () => {
// 关闭 prisma 客户端
await prisma.$disconnect()
})
输入以下命令用于执行脚本
npx ts-node .\lib\index.ts
## ouput
result is []
由结果可以看到,prisma client 已经可以成功连接到 mongodb,并且查询到目前的 用户数据(user) 为空,此脚本只是用 prisma 操作 mongodb 的一个实例,具体使用可以项目业务进行逻辑调整