gpt4 book ai didi

javascript - NestJS/TypeORM : Cannot set property metadata of# which has only a getter

转载 作者:行者123 更新时间:2023-12-05 00:34:42 25 4
gpt4 key购买 nike

我尝试运行我的 nestjstutorial 应用程序,显示以下错误。我的后端连接到 PostgreSQL 数据库。

TypeError: Cannot set property metadata of # which has only a getterat EntityManager.getCustomRepository (D:\Ganesh\MyDrive\nestjs\nestjs_tutorial\nestjsturorial\src\entity-manager\EntityManager.ts:1404:59)at DataSource.getCustomRepository (D:\Ganesh\MyDrive\nestjs\nestjs_tutorial\nestjsturorial\src\data-source\DataSource.ts:465:29)at InstanceWrapper.useFactory [as metatype] (D:\Ganesh\MyDrive\nestjs\nestjs_tutorial\nestjsturorial\node_modules@nestjs\typeorm\dist\typeorm.providers.js:13:35)at Injector.instantiateClass (D:\Ganesh\MyDrive\nestjs\nestjs_tutorial\nestjsturorial\node_modules@nestjs\core\injector\injector.js:333:55)at callback (D:\Ganesh\MyDrive\nestjs\nestjs_tutorial\nestjsturorial\node_modules@nestjs\core\injector\injector.js:48:41)at processTicksAndRejections (node:internal/process/task_queues:96:5)at Injector.resolveConstructorParams (D:\Ganesh\MyDrive\nestjs\nestjs_tutorial\nestjsturorial\node_modules@nestjs\core\injector\injector.js:122:24)at Injector.loadInstance (D:\Ganesh\MyDrive\nestjs\nestjs_tutorial\nestjsturorial\node_modules@nestjs\core\injector\injector.js:52:9)at Injector.loadProvider (D:\Ganesh\MyDrive\nestjs\nestjs_tutorial\nestjsturorial\node_modules@nestjs\core\injector\injector.js:74:9)at Injector.lookupComponentInImports (D:\Ganesh\MyDrive\nestjs\nestjs_tutorial\nestjsturorial\node_modules@nestjs\core\injector\injector.js:265:17)


我的代码如下所示:
app.module
    import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserController } from './user/user.controller';
import { UserModule } from './user/user.module';
import { UserService } from './user/user.services';
import { QuizModule } from './modules/quiz/quiz.module';
//import { QuizController } from './modules/quiz/quiz.controller';
//import { QuizService } from './modules/quiz/quiz.services';
import { TypeOrmModule } from '@nestjs/typeorm';
import { typeOrmConfig } from './config/typeorm.config';
//import { QuizRepository } from './modules/quiz/quiz.repository';

@Module({
imports: [UserModule, QuizModule, TypeOrmModule.forRoot(typeOrmConfig)],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
quiz.controller
    import {
Body,
Controller,
Get,
HttpCode,
Post,
UsePipes,
ValidationPipe,
} from '@nestjs/common';
import { QuizService } from './quiz.services';
import { CreateQuizDto } from '../dto/CreateQuiz.dto';

@Controller('quiz')
export class QuizController {
constructor(private readonly quizService: QuizService) {}

@Get('/')
getAllQuiz() {
return this.quizService.getAllQuiz();
}

@Post('/create')
@HttpCode(200)
@UsePipes(ValidationPipe)
async createQuiz(@Body() quizData: CreateQuizDto) {
return await this.quizService.createNewQuiz(quizData);
}
}
quiz.services
    import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { QuizRepository } from './quiz.repository';
import { CreateQuizDto } from '../dto/CreateQuiz.dto';

@Injectable()
export class QuizService {
constructor(
@InjectRepository(QuizRepository) private quizRepository: QuizRepository,
) {}

getAllQuiz() {
return [1, 2, 'from service', 3];
}
async createNewQuiz(quiz: CreateQuizDto) {
return await this.quizRepository.save(quiz);
}
}
quiz.module
    import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { QuizController } from './quiz.controller';
import { QuizService } from './quiz.services';
import { QuizRepository } from './quiz.repository';

@Module({
controllers: [QuizController],
imports: [TypeOrmModule.forFeature([QuizRepository])],
providers: [QuizService],
})
export class QuizModule {}
quiz.repository
    import { EntityRepository, Repository } from 'typeorm';
import { Quiz } from './quiz.entity';

@EntityRepository(Quiz)
export class QuizRepository extends Repository<Quiz> {
//<Quiz> means Quiz module
}
typeorm.config
import { TypeOrmModuleOptions } from '@nestjs/typeorm';

export const typeOrmConfig: TypeOrmModuleOptions = {
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: '123456',
database: 'quiz',
entities: [__dirname + '/../**/*.entity{.ts,.js}'],
synchronize: true,
};
dto
import { isNotEmpty, IsNotEmpty, Length } from 'class-validator';

export class CreateQuizDto {
@IsNotEmpty({ message: 'Title mandatory' })
@Length(3, 255)
title: string;

@IsNotEmpty()
@Length(3)
description: string;
}
实体
import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity('quizes')
export class Quiz extends BaseEntity {
@PrimaryGeneratedColumn({
comment: 'The quiz unique identifier',
})
id: number;

@Column({
type: 'varchar',
})
title: string;

@Column({
type: 'text',
})
description: string;

@Column({
type: 'varchar',
})
usernmae: string;

@Column({
type: 'date',
})
createddate: Date;

@Column({
type: 'boolean',
default: 1,
})
isActive: boolean;
}
有人知道我该如何解决这个问题?

最佳答案

我遇到了同样的问题,解决方案如下:在我的情况下,您必须确保 nestjs/typeorm 和 typeorm 的版本兼容我有 nestjs/typeorm 8.0.3 和 typeorm 0.3.6 的版本,这些版本是不兼容,nest 8.0.3 版本兼容 0.2.34 版本。当我将 typeorm 版本更改为 0.2.34 时,它编译成功。
package.json version image

关于javascript - NestJS/TypeORM : Cannot set property metadata of#<Repository> which has only a getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71891420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com