【问题标题】:Unable to connect mongoDB using nestjs/mongoose无法使用 nestjs/mongoose 连接 mongoDB
【发布时间】:2021-02-17 01:19:48
【问题描述】:

我有一个nest.js节点服务器,我试图在app.module中连接mongoDB数据库,当连接字符串不包含数据库名称时 - 连接到默认数据库“测试”成功,但是当我指定了数据库名称 - 总是出现“身份验证失败”错误。

app.module.ts:

这行得通:

  imports: [
    MongooseModule.forRoot('mongodb://admin:admin@localhost:30000'),
  ]

但是这个指定数据库名称失败并出现身份验证错误:

  imports: [
    MongooseModule.forRoot('mongodb://admin:admin@localhost:30000/test'),
  ]

或:

  imports: [
    MongooseModule.forRoot('mongodb://admin:admin@localhost:30000/data'),
  ]

直接使用MongoClient(不用nestjs)连接成功:

const client = new MongoClient('mongodb://admin:admin@localhost:30000');
await client.connect();
db = client.db('data');

知道我的问题是什么,我应该怎么做才能解决这个问题?

谢谢。

【问题讨论】:

标签: node.js mongodb mongoose nestjs


【解决方案1】:

将数据库名称指定为连接选项 - 不作为连接字符串的一部分解决了问题:

imports: [
    MongooseModule.forRoot({
       uri: 'mongodb://admin:admin@localhost:30000',
       dbName: 'data'
    }),
  ]

【讨论】:

    【解决方案2】:

    @nestjs/mongoose 的最新版本实际上不支持此功能,例如在 ^7.2.4 版本中,它接收一个字符串作为第一个参数,接收一个对象作为第二个参数,所以对我有用的是:

       imports: [
          MongooseModule.forRoot(
          'mongodb://user:password@localhost:27017/nestjs-tutorial?authSource=admin&readPreference=primary',
        ),
        customModule,
       ],
    

    【讨论】:

      【解决方案3】:

      根据NestJS official documentforRoot() 方法接受与来自 Mongoose 包的mongoose.connect() 相同的配置对象。

      您可以这样定义数据库名称:

      imports: [
        MongooseModule.forRoot('mongodb://admin:admin@localhost:30000', {
          dbName: 'custom_db_name',
        })
      ]
      

      【讨论】:

        猜你喜欢
        • 2023-01-05
        • 2015-01-28
        • 2020-02-22
        • 2020-07-25
        • 2020-06-07
        • 2021-06-27
        • 1970-01-01
        • 2022-01-14
        • 2021-04-11
        相关资源
        最近更新 更多