使用用户模型创建数据时 Prisma Nestjs 类型错误

问题描述 投票:0回答:3

我将 Nestjs 与 prisma 4.9.0 一起使用。我已经将 prisma 服务和 prisma 模块配置为全局服务。

我在寻找用户时没有任何问题。但是在创建用户时出现错误:

TypeError: Cannot read properties of undefined (reading 'user')

await this.prisma.user.create({data: data});

这是我的棱镜架构

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

model User {
  userID   String @id @unique @default(cuid())
  email    String @unique
  password String
}

这是我的nestjs创建用户服务

import { PrismaService } from 'src/prisma/prisma.service';
import * as argon from 'argon2';

export class CreateUserService {
  constructor(private prisma: PrismaService) { }
    
  async execute(email: string, password: string) {

    const hashedPassword = await argon.hash(password);

    const data = {
      email: '[email protected]',
      password: 'testpassword'
    };

    console.log(email, hashedPassword);

    const newUser = await this.prisma.user.create({
      data: data
    });

    return user;
  }
}

这是我的 UserController.ts

import { Controller, Post, Get } from '@nestjs/common';
import { CreateUserService, RetrieveUserService } from './services';

@Controller('user')
export class UserController {
  constructor(
    private createUserService: CreateUserService,
    private retrieveUserService: RetrieveUserService
  ) { }

  @Get()
  async retrieve() {
    try {
      return await this.retrieveUserService.execute();
    } catch (error) {
      console.log(error);
    }
  }

  @Post()
  async create(@Body('email') email: string, @Body('password') password: string) {
    try {
      return await this.createUserService.execute(email, password);
    } catch (error) {
      console.log(error);
    }
  }
}

这是我的 Prisma 模块

import { Global, Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';

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

这是我的 PrismaService

import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common';
import { ConfigService } from '@nestjs/config/dist';
import { PrismaClient } from '@prisma/client';

@Injectable()
export class PrismaService
  extends PrismaClient
  implements OnModuleInit, OnModuleDestroy
{
  constructor(config: ConfigService) {
    super({
      datasources: {
        db: {
          url: config.get('DATABASE_URL'),
        },
      },
    });
  }

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

这是我的应用程序模块

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { PrismaModule } from './prisma/prisma.module';
import { UserModule } from './user/user.module';



@Module({
  imports: [
    // App Modules
    ConfigModule.forRoot({ isGlobal: true }),
    PrismaModule,

    // Custom Modules
    UserModule,
    ...
    ...

  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

我尝试重新创建项目,将模型名称更改为客户,删除数据库和迁移。但问题仍然存在。

这是我第一次在 prisma 模型上遇到此类错误,我真的尝试了一切。

预先感谢您的任何帮助或建议。

node.js typescript nestjs backend prisma
3个回答
0
投票

解决了,

我创建了一个新的nestjs项目并导入了一个专用于nestjs的prisma包,名为nestjs-prisma


0
投票

我有同样的问题,我能够通过这样做来解决它

constructor(
    @Inject(PrismaService)
    private readonly prisma: PrismaService,
) {}

users.service.ts
中,因此您必须明确添加
@Inject()
装饰器。


0
投票

在类上方添加 @Injectable() 标签。例如,

@Injectable()
export class CreateUserService {
  constructor(private prisma: PrismaService) { }
    
  async execute(email: string, password: string) {

    const hashedPassword = await argon.hash(password);

    const data = {
      email: '[email protected]',
      password: 'testpassword'
    };

    console.log(email, hashedPassword);

    const newUser = await this.prisma.user.create({
      data: data
    });

    return user;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.