Nodejs Nestjs ORM框架@nestjs/prisma的使用

Nodejs Nestjs ORM框架@nestjs/prisma的使用
[@nestjs](/user/nestjs)/prisma 是一个用于 NestJS 的 Prisma ORM 集成库。Prisma 是一个现代化的 TypeScript/JavaScript ORM,支持多种数据库(如 PostgreSQL、MySQL 和 SQLite)。下面是如何在 NestJS 项目中使用 [@nestjs](/user/nestjs)/prisma 的步骤。

安装依赖

首先,你需要安装必要的依赖:

npm install [@nestjs](/user/nestjs)/prisma prisma @prisma/client

初始化 Prisma

初始化 Prisma 配置文件:

npx prisma init

这将在项目中创建 prisma 文件夹,并生成 schema.prisma 文件,该文件用于定义你的数据模型。

创建 Prisma 模型

编辑 prisma/schema.prisma 文件来定义你的数据模型。例如:

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

model User {
  id    Int      @id @default(autoincrement())
  email String   @unique
  name  String?
}

然后运行:

npx prisma migrate dev --name init
npx prisma generate

这将根据你的数据模型生成迁移脚本,并生成 Prisma Client。

配置 NestJS 使用 Prisma

安装 [@nestjs](/user/nestjs)/prisma 包:

npm install [@nestjs](/user/nestjs)/prisma

在你的 NestJS 应用程序中,你可以通过模块来配置 Prisma。例如,在 app.module.ts 中:

import { Module } from '[@nestjs](/user/nestjs)/common';
import { PrismaModule } from '[@nestjs](/user/nestjs)/prisma';
import { PrismaService } from './prisma.service';

@Module({
  imports: [
    PrismaModule.forRootAsync({
      useFactory: () => ({
        isGlobal: true,
        prismaOptions: {
          datasources: {
            db: {
              url: process.env.DATABASE_URL,
            },
          },
        },
      }),
    }),
  ],
  providers: [PrismaService],
})
export class AppModule {}

创建服务和控制器

接下来,创建一个服务来处理业务逻辑:

import { Injectable, HttpException, HttpStatus } from '[@nestjs](/user/nestjs)/common';
import { PrismaService } from './prisma.service';

@Injectable()
export class UserService {
  constructor(private readonly prisma: PrismaService) {}

  async getUsers() {
    return this.prisma.user.findMany();
  }

  async getUser(id: number) {
    const user = await this.prisma.user.findUnique({ where: { id } });
    if (!user) {
      throw new HttpException('User not found', HttpStatus.NOT_FOUND);
    }
    return user;
  }

  async createUser(data: { email: string; name?: string }) {
    return this.prisma.user.create({ data });
  }

  async updateUser(id: number, data: { email: string; name?: string }) {
    const user = await this.prisma.user.update({
      where: { id },
      data,
    });
    if (!user) {
      throw new HttpException('User not found', HttpStatus.NOT_FOUND);
    }
    return user;
  }

  async deleteUser(id: number) {
    const user = await this.prisma.user.delete({
      where: { id },
    });
    if (!user) {
      throw new HttpException('User not found', HttpStatus.NOT_FOUND);
    }
    return user;
  }
}

然后创建一个控制器来暴露 API:

import { Controller, Get, Post, Body, Param, Delete, Put } from '[@nestjs](/user/nestjs)/common';
import { UserService } from './user.service';

@Controller('users')
export class UserController {
  constructor(private readonly userService: UserService) {}

  @Get()
  findAll() {
    return this.userService.getUsers();
  }

  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.userService.getUser(Number(id));
  }

  @Post()
  create(@Body() createUserDto: { email: string; name?: string }) {
    return this.userService.createUser(createUserDto);
  }

  @Put(':id')
  update(@Param('id') id: string, @Body() updateUserDto: { email: string; name?: string }) {
    return this.userService.updateUser(Number(id), updateUserDto);
  }

  @Delete(':id')
  remove(@Param('id') id: string) {
    return this.userService.deleteUser(Number(id));
  }
}

运行应用

现在你可以运行你的 NestJS 应用程序并测试这些 API:

npm run start

这样,你就完成了在 NestJS 中使用 [@nestjs](/user/nestjs)/prisma 的基本设置。


3 回复

当然!@nestjs/prisma是NestJS的一个ORM库,用于简化Prisma的使用。首先,你需要安装它:

npm install [@nestjs](/user/nestjs)/prisma prisma

然后,在你的模块中导入PrismaModule,并配置PrismaClient:

import { Module } from '[@nestjs](/user/nestjs)/common';
import { PrismaModule } from '[@nestjs](/user/nestjs)/prisma';
import { PrismaService } from './prisma.service';

@Module({
  imports: [
    PrismaModule.forRoot({
      // 这里配置你的PrismaClient选项
      prismaServiceOptions: {
        // 例如,指定PrismaClient的实例名
        instanceName: 'myPrisma',
      },
    }),
  ],
  providers: [PrismaService],
})
export class ApplicationModule {}

现在,你可以在服务中注入PrismaService来操作数据库了。比如,添加一个用户:

import { Injectable } from '[@nestjs](/user/nestjs)/common';
import { PrismaService } from '../prisma.service';

@Injectable()
export class UserService {
  constructor(private readonly prisma: PrismaService) {}

  async createUser(data: any) {
    return this.prisma.user.create({ data });
  }
}

这样,你就有了一个可以使用的用户服务啦!希望这能帮到你,如果有更多问题,随时问哦!


@nestjs/prisma 是 NestJS 官方提供的 Prisma ORM 集成包,用于简化在 NestJS 项目中使用 Prisma 的过程。Prisma 是一个现代化的类型安全 ORM(对象关系映射器),支持多种数据库,如 PostgreSQL, MySQL, SQLite 等。下面是如何在 NestJS 项目中安装和配置 @nestjs/prisma 的步骤。

步骤 1: 创建 NestJS 项目

如果你还没有创建 NestJS 项目,可以通过以下命令创建:

npm i -g @nestjs/cli
nest new project-name

步骤 2: 安装依赖

接下来,你需要安装 @nestjs/prismaprisma 以及你的数据库适配器。这里以 PostgreSQL 为例:

npm install @nestjs/prisma prisma
npm install @prisma/client --save-exact

步骤 3: 初始化 Prisma

运行 Prisma 初始化命令来创建 schema.prisma 文件:

npx prisma init

这将创建一个 prisma 目录,里面包含 schema.prisma 文件,你可以在这个文件中定义你的数据模型。

步骤 4: 配置 Prisma Client

安装 @nestjs/prisma 模块:

npm install @nestjs/prisma

在你的 NestJS 项目中创建一个模块,并引入 @nestjs/prisma 模块:

import { Module } from '@nestjs/common';
import { PrismaModule } from '@nestjs/prisma';

@Module({
  imports: [
    PrismaModule.forRoot({
      prismaServiceOptions: {
        // 你可以在这里传递给 PrismaService 的选项
      },
      prismaClientOptions: {
        // 你可以在这里传递给 PrismaClient 的选项
      },
      // 其他选项...
    }),
  ],
})
export class AppModule {}

步骤 5: 使用 Prisma Service

你可以通过构造函数注入 PrismaService 来使用 Prisma:

import { Injectable } from '@nestjs/common';
import { PrismaService } from 'src/prisma/prisma.service';

@Injectable()
export class UserService {
  constructor(private readonly prisma: PrismaService) {}

  async findAll() {
    return this.prisma.user.findMany();
  }
}

步骤 6: 迁移和生成

最后,你需要生成 Prisma Client 并应用任何数据库迁移:

npx prisma generate
npx prisma migrate dev --name init

现在,你已经在 NestJS 中成功集成了 Prisma!你可以开始编写业务逻辑来操作数据库了。

@nestjs/prisma 是一个用于NestJS的Prisma ORM集成库。首先安装它及Prisma:

npm install @nestjs/prisma prisma
npx prisma init

然后在模块中导入 @nestjs/prisma

import { PrismaModule } from '@nestjs/prisma';

@Module({
  imports: [
    PrismaModule.forRoot({
      prismaOptions: {
        datasources: {
          db: {
            url: process.env.DATABASE_URL,
          },
        },
      },
    }),
  ],
})
export class ApplicationModule {}

接着,在服务中注入 PrismaService 使用Prisma Client:

import { Injectable } from '@nestjs/common';
import { PrismaService } from 'src/prisma/prisma.service';

@Injectable()
export class AppService {
  constructor(private prisma: PrismaService) {}

  async findAllUsers() {
    return this.prisma.user.findMany();
  }
}

以上是基本的配置和使用步骤。

回到顶部