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 降级节点版本后,我能够解决这个问题。