我正在用NestJs和TypeORM以及MongoDB做一个项目。之前我们用express和mongoose来查找数组列中的结果,我们使用了如下代码:
我正在使用nestJS + TypeORM和MongoDB创建一个REST API。我遇到的问题是,每当我对findOne进行GET调用或查找实体/表中的所有项时,都会出现错误,要么是说无法读取未定义的属性'prototype',要么是TypeError:“instanceof”的右侧不是对象。
我的实体
@Entity({ name: 'discordconfigs' })
export class DiscordConfig extends BaseEntity {
@ObjectIdColumn()
_id: ObjectID;
@Column()
clientId: string;
}
REPO的DI(服务文件中的内部构造函数)
@InjectRepository(DiscordConfig)
private guildConfigRepository: MongoRepository<DiscordConfig>,
通常,当使用NestJS + TypeORM和SQL数据库时,我可以使用下面的代码片段来返回数组中的所有项。使用MongoDB执行此操作会导致错误Cannot read property 'prototype' of undefined,并且不会返回任何内容。return this.guildConfigRepository.find();
我可以将上面的代码更改为这个,它会将所需的数据返回给我,但会导致抛出相同的错误,而不是我认为它只是一个警告,而不是一个错误。
return await this.guildConfigRepository
.createCursor(this.guildConfigRepository.find())
.toArray();
如果我想返回一个特定的项目,那么我已经尝试使用这个,但我得到一个错误TypeError:“instanceof”的右边不是一个对象。我控制台记录+检查了传入的参数类型,它是我作为参数输入的正确数据,也是一个字符串。return await this.guildConfigRepository.findOne({ clientId });
个
我能够POST数据并将其保存到数据库中而不会导致任何错误。如果我将数据库类型更改为MYSQL数据库,并使用正常的TypeORM方式调用存储库,则不会出现任何错误。
我将如何使用typeORM修复这个问题,或者使用mongoose会更容易吗?我正在考虑切换到mongoose,但是我想让typeORM工作,因为它与nestJS本机工作。
下面是我如何连接到数据库(在应用程序模块中的内部导入)
TypeOrmModule.forRoot({
type: 'mongodb',
url: 'mongoURI',
database: 'database',
entities: entities,
synchronize: true,
}),
如果我用这样的连接设置将其切换到MYSQL数据库,我的API工作起来没有任何错误。
TypeOrmModule.forRoot({
type: 'mysql',
host: 'ipaddress',
port: 3306,
username: 'userLogin',
password: 'userPassword',
database: 'databaseName',
entities: entities,
synchronize: true,
}),
2条答案
按热度按时间kjthegm61#
请尝试此执行绪结尾的方法:
https://github.com/nestjs/typeorm/issues/405
zrfyljdw2#
你可以使用Mongoose来代替TypeORM,你只需要改变一些文件中的一些配置。Mongoose与MongoDB的集成非常容易理解。这里是配置和使用的文档链接:https://docs.nestjs.com/recipes/mongodb#mongodb-mongoose