代码之家  ›  专栏  ›  技术社区  ›  Victor Matheus

NestJS提供程序未定义我找不到原因

  •  0
  • Victor Matheus  · 技术社区  · 1 周前

    Prisma.service.ts

    import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common'
    import { PrismaClient } from '@prisma/client'
    
    @Injectable()
    export class PrismaService
      extends PrismaClient
      implements OnModuleInit, OnModuleDestroy
    {
      constructor() {
        super({
          log: ['warn', 'error'],
        })
      }
    
      onModuleInit() {
        return this.$connect()
      }
    
      onModuleDestroy() {
        return this.$disconnect()
      }
    }
    

    用户立场.ts

    import { UserRepository } from "src/application/repositories/users-repository";
    import { PrismaService } from "../prisma.service";
    import { CreateUserDTO, FindUserDTO, UpdateUserDTO } from "src/core/dtos/user.dto";
    import { User, UserWithoutPassword } from "src/core/entities/user.entity";
    
    
    
    export class PrismaUserRepository implements UserRepository {
        constructor(private prisma: PrismaService) { }
    
        async create(user: CreateUserDTO): Promise<User> {
            
            const createdUser = await this.prisma.user.create({ data: user })
    
            if (createdUser) {
                return null;
            }
    
    
            return createdUser;
        }
    }
    
    

    抽象用户假设.ts

    
    import { User, UserWithoutPassword } from 'src/core/entities/user.entity';
    import {CreateUserDTO, FindUserDTO, UpdateUserDTO} from '../../core/dtos/user.dto'
    
    export abstract class UserRepository {
        abstract create(user: CreateUserDTO): Promise<User | null>
    
        abstract findByEmail(email: string): Promise<User | null>
    
        abstract findAll(query: FindUserDTO): Promise<UserWithoutPassword[]>
    
        abstract findOne(id: string): Promise<UserWithoutPassword | null>
    
        abstract update(id: string, user: UpdateUserDTO): Promise<UserWithoutPassword | null>
    
        abstract remove(id: string): Promise<UserWithoutPassword | null>
    }
    

    数据库模块.ts

    
    import { Module } from "@nestjs/common";
    import { PrismaService } from "./prisma/prisma.service";
    import { UserRepository } from "../../application/repositories/users-repository";
    import { PrismaUserRepository } from "./prisma/repositories/users-repository";
    
    
    @Module({
        providers: [
            PrismaService,
            {
                provide: UserRepository,
                useClass: PrismaUserRepository,
            },
        ],
        exports: [
            UserRepository
        ],
    })
    export class DatabaseModule { }
    

    当试图创建一个用户时,它说prisma是未定义的 TypeError: Cannot read properties of undefined (reading 'user') at PrismaUserRepository.create (\src\infra\database\prisma\repositories\users-repository.ts:13:47)

    我试着检查导入,看看是否忘记了任何nestJS装饰器,但没有发现任何错误。我还确保启动npm时Prisma已连接

    1 回复  |  直到 1 周前
        1
  •  1
  •   Micael Levi    1 周前

    我想那是因为你错过了 @Injectable() 在…上 PrismaUserRepository ,并且该类已经声明了Nestjs DI容器应该解析的依赖项