标签搜索

nestJs 基础增删改查

kirei
2025-06-14 / 0 评论 / 8 阅读 / 正在检测是否收录...

创建项目

nest new server 

查看帮助

nest g --help

创建模块

nest g res 模块名

目录

dot 一般用来做验证的,比如哪些字段要必填
entities 用来创建数据表 用 prisma 就不用这个了

案例

1.创建一个教师相关的接口

nest g res teacher

2.安装 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

  1. 将 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

评论 (0)

取消