Nest无法找到PrismaService,main.ts调用服务崩溃求助
解决NestJS中main.ts获取PrismaService时服务崩溃的问题
在main.ts中尝试获取PrismaService时服务持续崩溃,移除相关代码后服务器可正常启动。以下是相关代码、报错信息及解决方案:
相关代码
prisma.service.ts
import { INestApplication, Injectable, OnModuleInit } from '@nestjs/common'; import { PrismaClient } from '@prisma/client'; @Injectable() export class PrismaService extends PrismaClient implements OnModuleInit { async onModuleInit() { await this.$connect(); } async enableShutdownHooks(app: INestApplication) { this.$on('beforeExit', async () => { await app.close(); }); } }
main.ts
import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { PrismaService } from './prisma.service'; import { ValidationPipe } from '@nestjs/common'; import helmet from 'helmet'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.enableCors({ allowedHeaders: '*', origin: '*', }); app.use(helmet()); app.use(helmet.hidePoweredBy()); app.use(helmet.contentSecurityPolicy()); const prismaService = app.get(PrismaService); await prismaService.enableShutdownHooks(app); app.useGlobalPipes( new ValidationPipe({ transform: true, whitelist: true, forbidNonWhitelisted: true, }), ); await app.listen(process.env.PORT, () => console.log('runing...')); } bootstrap();
报错信息
Error: Nest could not find PrismaService element (this provider does not exist in the current context) at InstanceLinksHost.get (/home/rafittu/wophi/alma/back/node_modules/@nestjs/core/injector/instance-links-host.js:15:19) at NestApplication.find (/home/rafittu/wophi/alma/back/node_modules/@nestjs/core/injector/abstract-instance-resolver.js:8:60) at NestApplication.get (/home/rafittu/wophi/alma/back/node_modules/@nestjs/core/nest-application-context.js:64:20) at /home/rafittu/wophi/alma/back/node_modules/@nestjs/core/nest-factory.js:133:40 at Function.run (/home/rafittu/wophi/alma/back/node_modules/@nestjs/core/errors/exceptions-zone.js:10:13) at Proxy.<anonymous> (/home/rafittu/wophi/alma/back/node_modules/@nestjs/core/nest-factory.js:132:46) at Proxy.<anonymous> (/home/rafittu/wophi/alma/back/node_modules/@nestjs/core/nest-factory.js:181:54) at bootstrap (/home/rafittu/wophi/alma/back/src/main.ts:18:29)
问题原因及解决方法
报错核心原因是未在AppModule中注册PrismaService作为提供者,NestJS的依赖注入系统只能识别已在模块中注册的服务。
解决步骤
- 打开
app.module.ts文件,导入PrismaService - 在
providers数组中添加PrismaService
修改后的app.module.ts示例:
import { Module } from '@nestjs/common'; import { PrismaService } from './prisma.service'; // 导入你项目中的其他模块/控制器 @Module({ imports: [/* 你的其他导入模块 */], controllers: [/* 你的控制器 */], providers: [PrismaService], // 必须在此处添加PrismaService }) export class AppModule {}
额外说明
- 确保
PrismaService的导入路径正确,避免因路径错误导致无法识别 - 注册完成后,NestJS会自动实例化
PrismaService,此时在main.ts中通过app.get(PrismaService)即可正常获取实例
内容的提问来源于stack exchange,提问作者Rafael Ribeiro
相关产品推荐
相关产品推荐

