创建项目
nest new server 查看帮助
nest g --help创建模块
nest g res 模块名目录
dot 一般用来做验证的,比如哪些字段要必填
entities 用来创建数据表 用 prisma 就不用这个了
案例
1.创建一个教师相关的接口
nest g res teacher2.安装 prisma
npm install prisma --save-dev初始化 prisma
npx prisma init在生成的 .dev 文件配置数据库信息,
把 schema.prisma 里的 datasource db->provider 的值改为 mysql 即可
3.创建表
在上述的文件中写入下面内容
//uuid:-分割mac地址+随机数+时间戳生成的
model Teacher {
id String @id @default(cuid()) //@id主键 直接用 cuid 即可
// @db.LongText 精确控制Strig
// @ignore忽略本行代码
// @map("别名")
// @unique 唯一不可重复
name String
//createAt DateTime @default(now()) //自动解决数据库8小时问题
//updateAt DateTime @default(now()) @updatedAt //@updatedAt 数据变动自动更新更新的时间
// 上面用 prisma 生成时间很可能导致8小时问题 有问题就用用下面的
createdAt DateTime @default(dbgenerated("NOW()")) @db.DateTime
updatedAt DateTime @default(dbgenerated("NOW() ON UPDATE NOW()")) @db.Timestamp(0)
}注意:在该文件中有动生成的 generator client 对象里会有一个 output 字段,将这个删除掉,否则可能导致后续导入 PrismaClient 失败
4.数据库迁移
上述内容写好后就要进行数据库迁移,也就是根据上面的信息开始真正的创建表了
运行:
npx prisma migrate dev --name init会自动在当前目录的 migrations 目录创建数据库语句文件
5.创建 prisma service
执行:
nest g s prisma此时会在 src 目录下生成 prisma 目录
这里面的文件填入下面内容:
import { Injectable, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit {
async onModuleInit() {
// 连接prisma 类似 vue 的 mounted
await this.$connect();
}
}
此时已连接到了 prisma
将 prisma 注入全局
执行:nest g mo prisma此时会在 src 的 prima 目录下生成 prisma.module.ts 文件,
随后需要在 app.module.ts 中注入 prismaModule
如下:import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { TeacherModule } from './teacher/teacher.module'; import { PrismaService } from './prisma/prisma.service'; import { PrismaModule } from './prisma/prisma.module'; // 导入 @Module({ imports: [TeacherModule, PrismaModule], //注入 controllers: [AppController], //路由 providers: [AppService, PrismaService], //逻辑 }) export class AppModule {}别着急现在还不能在具体的接口使用 prisma
现在我们回到 teacher 的 service 文件里注入 prisamService
如下:import { PrismaService } from '../prisma/prisma.service';//导入 @Injectable() export class TeacherService { constructor(private prisma: PrismaService) {} //注入 create(createTeacherDto: CreateTeacherDto) { return; }}
其它注意事项
如果在 schema.prisma 中新增了表,就要再运行一次 npx prisma migrate dev --name init,
如果此时使用时没有代码提示导致报错,就先把服务停了
再运行 npx prisma generate 会重新生成 PrismaClient ,然后再启动服务就好了,
理论上再运行第一个命令时会自动生成新的 PrismaClient ,没有的话就自己手动跑一下吧
如果改变了一些字段需要执行 npx prisma migrate reset 清理原来的内容同时生成新的,注意这个命令会删除已存在的所有数据
评论 (0)