我将 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 模型上遇到此类错误,我真的尝试了一切。
预先感谢您的任何帮助或建议。
解决了,
我创建了一个新的nestjs项目并导入了一个专用于nestjs的prisma包,名为nestjs-prisma
我有同样的问题,我能够通过这样做来解决它
constructor(
@Inject(PrismaService)
private readonly prisma: PrismaService,
) {}
在
users.service.ts
中,因此您必须明确添加 @Inject()
装饰器。
在类上方添加 @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;
}
}