【问题标题】:Mongoose Error: Cannot read property 'length' of undefined in NestJsMongoose 错误:无法读取 NestJs 中未定义的属性“长度”
【发布时间】:2021-10-21 19:39:15
【问题描述】:

我使用的是 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 及其类型。但现在它显示了新的错误。

我尝试了这篇文章中提到的解决方案: Node.js heap out of memory

但这对我也不起作用。 我正在使用配置为 8GB 的​​ Mac-M1。

更新 现在这个问题已经解决了。该项目在节点 v10.24.1 上运行,我使用的是节点 v16.6.2。 使用 NVM 降级 node 版本后,此问题消失。

【问题讨论】:

  • 你的 app.module.ts 怎么样?请将其添加到您的问题中。
  • @PauloFabrício 请看一看。
  • 为什么要将SharedModule 导入MongooseModule?一般来说,您必须从@nestjs/config 导入ConfigModule。这能解决您的问题吗?
  • @LarsFlieger 即使从猫鼬导入中删除共享模块后,问题仍然存在。我不认为这应该是一个问题。

标签: mongodb mongoose nestjs


【解决方案1】:

这是因为我使用了错误的节点版本。该项目建立在节点 v10.24.1 上,我使用的是节点 v16.6.2。

使用 NVM 降级节点版本后,我能够修复此问题。

【讨论】:

    【解决方案2】:

    您必须从 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('*');
        }
    }
    

    【讨论】:

    • 即使从猫鼬导入中删除共享模块后,问题仍然存在。
    • 尝试删除文件夹 node_modules 并运行 npm install
    • 我做到了。但现在它显示“Javascript 堆内存不足”。同一个项目在我的其他同事系统上运行良好。并且设置完全相同。我仍在深入研究这个问题,一旦发现就会更新。
    • 您是否重新安装了节点?
    猜你喜欢
    • 1970-01-01
    • 2015-05-08
    • 2020-06-02
    • 2021-03-15
    • 2015-02-05
    • 2017-11-25
    • 2021-02-26
    • 1970-01-01
    • 2022-11-12
    相关资源
    最近更新 更多