Mongoose Error: Cannot read property 'length' of undefined in NestJs
Mongoose Error: Cannot read property 'length' of undefined in NestJs
我正在使用 nests 框架,mongodb 和 mongoose 的版本如下所述。
具体报错请参考截图
版本
"mongodb": "4.0.0",
"mongoose": "5.5.12",
Error Screenshot
用户文档模块
import { Module } from '@nestjs/common';
import { UserDocumentsService } from './user-documents.service';
import { UserDocumentsController } from './user-documents.controller';
import { MongooseModule } from '@nestjs/mongoose';
import { UserDocumentsSchema } from './schema/user-documents.schema';
@Module({
imports: [
// showing error on this line
MongooseModule.forFeature([
{ name: 'UserDocument', schema: UserDocumentsSchema },
]),
],
controllers: [UserDocumentsController],
providers: [UserDocumentsService],
})
export class UserDocumentsModule {}
App.module.ts
@Module({
imports: [
MongooseModule.forRootAsync({
imports: [SharedModule],
useFactory: async (configService: ConfigService) => ({
uri: configService.mongoDBName(),
useNewUrlParser: true,
useFindAndModify: false,
}),
inject: [ConfigService],
}),
UserDocumentsModule,
],
providers: [AppGateway],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer): MiddlewareConsumer | void {
consumer.apply(contextMiddleware).forRoutes('*');
}
}
更新
我认为模式文件中的 mongoose 导入有问题。它说“找不到模块 'mongoose' 的声明”。
我尝试删除并重新安装 mongoose 及其类型。但是现在它显示了新的错误。
我尝试了post中提到的解决方案:
但这对我也不起作用。
我正在使用具有 8GB 配置的 Mac-M1。
更新
该问题现已解决。该项目在节点 v10.24.1 上 运行,我使用的是节点 v16.6.2。
使用NVM降级node版本后,这个问题就没有了
您必须从 MongooseModule 中提取 SharedModule 导入。
试试这个:
@Module({
imports: [
MongooseModule.forRootAsync({
useFactory: async (configService: ConfigService) => ({
uri: configService.mongoDBName(),
useNewUrlParser: true,
useFindAndModify: false,
}),
inject: [ConfigService],
}),
UserDocumentsModule,
SharedModule
],
providers: [AppGateway],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer): MiddlewareConsumer | void {
consumer.apply(contextMiddleware).forRoutes('*');
}
}
这是因为我使用了错误版本的节点。该项目建立在节点 v10.24.1 上,我使用的是节点 v16.6.2。
使用 NVM 降级节点版本后,我能够解决这个问题。
我正在使用 nests 框架,mongodb 和 mongoose 的版本如下所述。 具体报错请参考截图
版本
"mongodb": "4.0.0",
"mongoose": "5.5.12",
Error Screenshot
用户文档模块
import { Module } from '@nestjs/common';
import { UserDocumentsService } from './user-documents.service';
import { UserDocumentsController } from './user-documents.controller';
import { MongooseModule } from '@nestjs/mongoose';
import { UserDocumentsSchema } from './schema/user-documents.schema';
@Module({
imports: [
// showing error on this line
MongooseModule.forFeature([
{ name: 'UserDocument', schema: UserDocumentsSchema },
]),
],
controllers: [UserDocumentsController],
providers: [UserDocumentsService],
})
export class UserDocumentsModule {}
App.module.ts
@Module({
imports: [
MongooseModule.forRootAsync({
imports: [SharedModule],
useFactory: async (configService: ConfigService) => ({
uri: configService.mongoDBName(),
useNewUrlParser: true,
useFindAndModify: false,
}),
inject: [ConfigService],
}),
UserDocumentsModule,
],
providers: [AppGateway],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer): MiddlewareConsumer | void {
consumer.apply(contextMiddleware).forRoutes('*');
}
}
更新 我认为模式文件中的 mongoose 导入有问题。它说“找不到模块 'mongoose' 的声明”。
我尝试删除并重新安装 mongoose 及其类型。但是现在它显示了新的错误。
我尝试了post中提到的解决方案:
但这对我也不起作用。 我正在使用具有 8GB 配置的 Mac-M1。
更新 该问题现已解决。该项目在节点 v10.24.1 上 运行,我使用的是节点 v16.6.2。 使用NVM降级node版本后,这个问题就没有了
您必须从 MongooseModule 中提取 SharedModule 导入。
试试这个:
@Module({
imports: [
MongooseModule.forRootAsync({
useFactory: async (configService: ConfigService) => ({
uri: configService.mongoDBName(),
useNewUrlParser: true,
useFindAndModify: false,
}),
inject: [ConfigService],
}),
UserDocumentsModule,
SharedModule
],
providers: [AppGateway],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer): MiddlewareConsumer | void {
consumer.apply(contextMiddleware).forRoutes('*');
}
}
这是因为我使用了错误版本的节点。该项目建立在节点 v10.24.1 上,我使用的是节点 v16.6.2。
使用 NVM 降级节点版本后,我能够解决这个问题。