NestJs与Prisma连接mysql数据库
1 前提条件
1.1 下载nodejs并安装,cmd输出以下就是成功了
$node -v
v14.21.3
$ npm -v
6.14.18
1.2 起步,用nest脚手架,找个放项目的目录
1. 安装依赖
$ npm i -g @nestjs/cli
2. 使用Nest CLI建建项目
$ nest new project-name // 出现提示,选择npm,就会自动创建一个nest项目脚手架
3. 用Nest CLI 快速创建resource
$ nest g resource
? What name would you like to use for this resource (plural, e.g., "users")? user
? What transport layer do you use? REST API
? Would you like to generate CRUD entry points? Yes
会创建出user的目录在项目中,里面包含dto、entities、controller、module、service
4. 在根目录下创建一个.env的文件
5. 调用配置文件的值需要安装依赖文件
$ npm i --save @nestjs/config
1.3 一个在运行的Mysql数据库和一张user表的库
2 prisma的引入
2.1 需要安装的依赖
1. 将 Prisma CLI 作为开发依赖项添加到项目中
$ npm install prisma --save-dev
2. 通过使用以下命令创建Prisma 模式文件模板来设置 Prisma 项目:
$ npx prisma init
这个命令会生一个一个prisma的新目录也包含一个schema.prisma的文件夹
3. 安装prisma/clien依赖
$ npm install @prisma/client
2.2 修改schema.prisma配置,添加一个User表数据
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql" // 这里默认是postgresql,可以根据自己的数据库不同修改
url = env("DATABASE_URL")
}
model User { // 对应数据库User表字段
id Int @id @default(autoincrement())
age Int?
name String?
nickname String?
}
2.3 在根目录下的.env文件中添加数据库配置
注意这里的DATABASE_URL,与schema.prisma上的是对应的
DATABASE_URL=mysql://root:root@localhost:3306/learndata
DATABASE_URL_WITH_SCHEMA=${DATABASE_URL}?schema=public
2.4 对 Prisma.schema 进行更改后,都需要执行命令去更新生成的 Prisma Client 代码
$ npx prisma generate
输出以下则是成功:
Environment variables loaded from .env
Prisma schema loaded from prisma\schema.prisma
✔ Generated Prisma Client (4.12.0 | library) to .\node_modules\@prisma\client in 71ms
You can now start using Prisma Client in your code. Reference: https://pris.ly/d/client
```
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
```
3. nestjs中应用prisma,创建例子
3.1 user.service中
1.引入import { PrismaClient } from '@prisma/client'
2.create 方法创建调用:
async create(createUserDto: CreateUserDto) {
const prisma = new PrismaClient()
return await prisma.user.create({data:createUserDto});
}
3.2 user.controller 中
1.constructor中引入UserService
constructor(private readonly userService: UserService) {}
2.创建方法修改
@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.userService.create(createUserDto);
}
4. Postman访问/user/create
传入
{
"name":"bb",
"age":1,
"nickname":"balabal"
}
数据库就有一条数据了
5.分析
简单的引入prisma,prisma client 的创建还需要封装放上下文中,不能每次用都去new