一、为什么是 Remix/Prisma/Sqlite ?
最主要的一个原因就是轻量级别,轻量级体现在只需要一个 Remix 服务即可。
二、Prisma 指令提早看
假如你还不了解 Prisma 的常用指令,那么下面盘点的常用指令,提早了解,后边会用到:
指令 | 阐明 |
---|---|
prisma init |
初始化一个新的Prisma项目 |
prisma migrate dev |
将数据模型应用于数据库 |
prisma migrate reset |
回滚数据库到开始状况 |
prisma studio |
发动一个Web界面,用于检查和修改数据库中的数据 |
prisma generate |
生成Prisma客户端代码,用于衔接和操作数据库 |
prisma format |
格式化Prisma模型文件 |
prisma validate |
验证Prisma模型文件的正确性 |
prisma db seed |
开发环境将种子数据增加到数据库中 |
npx prisma migrate reset |
重置您的数据库并将其恢复到搬迁历史中的开始状况 |
三、在 Remix 中增加 Sqlite 和 Prisma 的流程如下:

快速初始化一个 Remix 项目:
pnpm dlx create-remix@latest <app_name>

1、装置依靠
pnpm install prisma -g # 全局装置
2、用 sqlite 初始化 prisma
prisma init --datasource-provider sqlite

指令自动生成文件如下:
-
.env
文件
DATABASE_URL="file:./dev.db"
-
prisma/schema.prisma
文件
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
3、在 Schema 文件中增加模型
model User {
id Int @id @default(autoincrement())
name String
email String @unique
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
4、生成客户端代码
“prisma generate” 依据 Prisma schema 文件生成 Prisma Client 代码,该代码供给了一种类型安全的方法来访问数据库,简化了应用程序与数据库交互的进程,减少了手动编写重复代码的作业量。

5、运用搬迁指令

npx prisma migrate dev --name init
每一次 Schema 发生变化的时候,都要调用此指令生成新的搬迁文件(生成 sql 文件,数据文件件,装置包)
生成文件:
├── dev.db ├── dev.db-journal ├── migrations │ ├── 2x23x42x1x3x4x_init │ │ └── migration.sql │ └── migration_lock.toml
同时自动装置了 npm 包:
- prisma
- @prisma/client
6、在 studio 中检查
npx prisma studio
会发动一个 web 服务,在浏览器中操作数据库,不需要一个单独的客户端。
- 初始界面

- 模型中

在 stdio 也可以对数据库进行相应的增删改查作业。
7、在 Remix 中运用
①. 对外暴露 db
-
db.server.ts
文件
import { PrismaClient } from "@prisma/client";
let prisma: PrismaClient;
declare global {
var __db__: PrismaClient;
}
if (process.env.NODE_ENV === "production") {
prisma = new PrismaClient();
} else {
if (!global.__db__) {
global.__db__ = new PrismaClient();
}
prisma = global.__db__;
prisma.$connect();
}
export { prisma };
②. 抽象模型层
在 app/models
下面界说模型,所以一个示例:
import { prisma } from "~/db.server";
export async function getUserById(id: User["id"]) {
return prisma.user.findUnique({ where: { id } });
}
export async function getUserByEmail(email: User["email"]) {
return prisma.user.findUnique({ where: { email } });
}
③. 在 action/loader 中运用模型层操作数据库
import { createUser, getUserByEmail } from "~/models/user.server";
export const action = async ({ request }: ActionArgs) => {
// ...
const existingUser = await getUserByEmail(email);
// ...
const user = await createUser(email, password);
}
④. 额定的 seed 初始化
假如需要在初始化的时候,初始化一些数据,那么可以界说 prisma/seed.ts
文件。
import { PrismaClient } from "@prisma/client";
const db = new PrismaClient();
async function seed() {
// use db write data ...
}
seed();
然后在 package.json 中界说 seed
字段
{
"name": "my-project",
"version": "1.0.0",
"prisma": {
"seed": "ts-node prisma/seed.ts"
},
"devDependencies": {
"@types/node": "^14.14.21",
"ts-node": "^9.1.1",
"typescript": "^4.1.3"
}
}
然后合作指令: npx prisma db seed
初始出初始化数据
四、流程总结
- prisma init –source-provider sqlite
- 增加 model
- 生成客户端
- prisma migrate dev –name init
- npx prisma studio
- 运用客户端操作
- 外额的 seed 初始化
五、小结
prisma 能供给了新的 ORM 操作数据库,cli 指令生成的内容相对较多。了解之后会变得简略容易。而且供给 studio 在浏览器中访问数据库,而不需要装置剩余的客户端,对前端友好,是轻量级全栈开发很好挑选。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。