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

问题描述 投票:0回答: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>
}

数据库.module.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 已连接

typescript nestjs clean-architecture
1个回答
0
投票

我猜那是因为你错过了

@Injectable()
上的
PrismaUserRepository
,并且该类已经声明了 Nestjs DI 容器应该解析的依赖关系

© www.soinside.com 2019 - 2024. All rights reserved.