在 NestJS 应用中使用 @nestjs/config
配置 Prisma 数据库连接是一个常见的需求。@nestjs/config
是一个用于管理环境变量的模块,而 Prisma 是一个现代的 ORM(对象关系映射)工具。以下是详细的步骤:
首先,确保你已经安装了 @nestjs/config
和 prisma
相关的依赖。
npm install @nestjs/config prisma @prisma/client
在项目根目录下创建一个 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?
}
在项目根目录下创建一个 .env
文件,并在其中定义 DATABASE_URL
环境变量。
touch .env
在 .env
文件中添加数据库连接字符串:
DATABASE_URL="postgresql://user:password@localhost:5432/mydb"
@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 {}
创建一个 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();
}
}
创建一个 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 {}
现在你可以在其他服务或控制器中注入 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 });
}
}
在配置完成后,你需要运行 Prisma 迁移来同步数据库模式。
npx prisma migrate dev --name init
最后,启动你的 NestJS 应用。
npm run start
通过以上步骤,你可以在 NestJS 应用中使用 @nestjs/config
配置 Prisma 数据库连接。@nestjs/config
模块帮助你管理环境变量,而 Prisma 提供了强大的 ORM 功能来操作数据库。