在 Redux 笔记 文章中,在 server 项目中,写死了接口返回的数据。这篇文章就来配置 Postgresql 数据库和 Prism 实现对数据的增删改查。
Postgresql 数据库的安装与配置
本地安装 postgresql 除了占用本机存储外,切换新设备时还需要重新配置,使用 docker compose 借助 postgresql 镜像,可以快速搭建 postgresql 开发环境。
Docker compose 是用来定义和运行多容器 docker 应用的工具,在配置文件中配置多个服务,通过一条命令就能够同时运行多个服务。
配置 docker-compose.yml 文件
在根目录下新建 docker-compose.yml 配置文件,来配置 postgresql 数据库。
version: '3.7'
services:
postgres:
image: postgres:latest
restart: always
environment:
- POSTGRES_USER=root
- POSTGRES_PASSWORD=password
- POSTGRES_DB=ttask_db
ports:
- '5432:5432'
volumes:
- postgres:/var/lib/postgresql/data
volumes:
postgres:
在根目录下的 package.json 中添加启动数据库容器的脚本,db:up 和 db:down 分别执行 docker-compose up -d
和 docker-compose down
来启动和关闭镜像服务。
记得修改 Docker 镜像源,mac 上修改 docker 桌面客户端,在设置的 Docker Engine 的 Json 文件中添加国内源。
"registry-mirrors": [
"https://hub-mirror.c.163.com/",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
]
修改之后重启 docker 通过 docker info
命令如果出现了 Registry Mirrors 表示配置已经生效。执行 pnpm db:up
启动 docker,通过 docker ps
查看本机 docker 镜像。我在 mac 上使用 TablePlus App 来访问数据库,启动之后就可以在 App 中简历对数据库的链接了。
Prisma
依赖安装
pnpm i prisma -D --filter server
接下来在 server 项目下执行 pnpm prisma init
来创建 prisma 需要的 scheme 文件。
连接数据库
执行完上面的初始化代码之后,prisma 会在项目目录下新建 prisma 文件夹,新增了 scheme.prisma 文件,并新建了 .env 文件,修改了 .gitignore 文件。我们需要做的是在 .env 文件中填写正确的数据库链接链接,链接规则可以查看这里。
新建数据库表
在 scheme.prisma 文件中添加 Todo 任务数据模型。
// 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 = "postgresql"
url = env("DATABASE_URL")
}
model Todo {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
title String @db.VarChar(255)
content String?
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
model Profile {
id Int @id @default(autoincrement())
bio String?
user User @relation(fields: [userId], references: [id])
userId Int @unique
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
todos Todo[]
profile Profile?
}
在终端中运行如下命令,创建数据库以及 User
/Profile
/Todo
数据表。
pnpm run prisma migrate dev --name init
上面的命令主要做了两个工作
- 创建 prisma/migrations 目录下新建 SQL 转换文件
- 执行上面新建的文件,操作数据库
新建 prisma.ts 文件用于导出 @prisma/client 的实例
import { PrismaClient } from '@prisma/client';
export const prisma = new PrismaClient();
接下来在 controllers 中添加创建用户与获取用户数据的 API
import { Controller, Get, Post, RouterContext } from '@swizm/nflask';
import koaBody from 'koa-body';
import { prisma } from '../../prisma';
@Controller('/user')
class User {
@Post('/', koaBody())
async createNewUser(ctx: RouterContext) {
const body = ctx.request.body;
if (body) {
const { name, email }: { name?: string; email: string } = ctx.request.body;
const user = await prisma.user.create({
data: {
name,
email,
},
});
ctx.body = user;
return;
}
ctx.status = 400;
ctx.body = {
msg: 'incorrect field',
};
}
@Get('/:id')
async getUserById(ctx: RouterContext) {
const { id } = ctx.params;
const user = await prisma.user.findUnique({
where: {
id: Number(id),
},
});
ctx.body = user;
}
}
export default User;
启动 server 服务之后,就可以调用接口新建用户以及查询用户信息了,同时在可视化数据库客户端上就能查看到数据了。
![sql](/_next/image?url=%2Fstatic%2Fimages%2Fsql%2Fnew_user_db.png&w=3840&q=75)