插件窝 干货文章 如何在 NestJS 应用中使用 @nestjs/config 配置 Prisma 数据库连接?

如何在 NestJS 应用中使用 @nestjs/config 配置 Prisma 数据库连接?

Prisma NestJS PrismaService 配置 882    来源:    2025-03-23

在 NestJS 应用中使用 @nestjs/config 配置 Prisma 数据库连接是一个常见的需求。@nestjs/config 是一个用于管理环境变量的模块,而 Prisma 是一个现代的 ORM(对象关系映射)工具。以下是详细的步骤:

1. 安装必要的依赖

首先,确保你已经安装了 @nestjs/configprisma 相关的依赖。

npm install @nestjs/config prisma @prisma/client

2. 配置 Prisma

在项目根目录下创建一个 prisma 文件夹,并在其中创建一个 schema.prisma 文件。

mkdir prisma
touch prisma/schema.prisma

schema.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?
}

3. 配置环境变量

在项目根目录下创建一个 .env 文件,并在其中定义 DATABASE_URL 环境变量。

touch .env

.env 文件中添加数据库连接字符串:

DATABASE_URL="postgresql://user:password@localhost:5432/mydb"

4. 配置 @nestjs/config

在你的 NestJS 应用中配置 @nestjs/config 模块。通常,你会在 app.module.ts 中进行配置。

// src/app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { PrismaModule } from './prisma/prisma.module';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true, // 使配置全局可用
      envFilePath: '.env', // 指定 .env 文件路径
    }),
    PrismaModule,
  ],
})
export class AppModule {}

5. 创建 Prisma 服务

创建一个 Prisma 服务来管理数据库连接。你可以在 src/prisma 目录下创建一个 prisma.service.ts 文件。

// src/prisma/prisma.service.ts
import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';

@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
  async onModuleInit() {
    await this.$connect();
  }

  async onModuleDestroy() {
    await this.$disconnect();
  }
}

6. 创建 Prisma 模块

创建一个 Prisma 模块来导出 Prisma 服务。

// src/prisma/prisma.module.ts
import { Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';

@Module({
  providers: [PrismaService],
  exports: [PrismaService],
})
export class PrismaModule {}

7. 使用 Prisma 服务

现在你可以在其他服务或控制器中注入 PrismaService 来使用 Prisma 进行数据库操作。

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

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

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

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

8. 运行 Prisma 迁移

在配置完成后,你需要运行 Prisma 迁移来同步数据库模式。

npx prisma migrate dev --name init

9. 启动应用

最后,启动你的 NestJS 应用。

npm run start

总结

通过以上步骤,你可以在 NestJS 应用中使用 @nestjs/config 配置 Prisma 数据库连接。@nestjs/config 模块帮助你管理环境变量,而 Prisma 提供了强大的 ORM 功能来操作数据库。