【问题标题】:NestJS API not working with MongoDB (Index keys cannot be empty)NestJS API 不适用于 MongoDB(索引键不能为空)
【发布时间】:2020-02-18 18:27:40
【问题描述】:

我想使用 TypeORM 创建一个带有 NestJS 的 API。我使用过 Postgres 并且它有效,但我需要切换到 MongoDB。因此我做了一些改变。连接已建立,但之后我会立即收到此错误:

MongoError: Index keys cannot be empty.

app.module.ts

TypeOrmModule.forRoot({
      type: DATABASE_TYPE,
      url: DATABASE_HOST,
      port: DATABASE_PORT,
      username: DATABASE_USERNAME,
      password: DATABASE_PASSWORD,
      database: DATABASE_NAME,
      entities: [`${__dirname}/**/*.entity.{ts,js}`],
      synchronize: DATABASE_SYNCHRONIZE,
    })

config.ts

export const DATABASE_TYPE: any = process.env.DATABASE_TYPE || 'postgres';
export const DATABASE_USERNAME: string =
  process.env.DATABASE_USERNAME || 'admin';
export const DATABASE_PASSWORD: string =
  process.env.DATABASE_PASSWORD || 'asdsddddd';
export const DATABASE_HOST: string = process.env.DATABASE_HOST || 'localhost';
export const DATABASE_PORT: number = Number(process.env.DATABASE_PORT) || 5432;
export const DATABASE_NAME: string = process.env.DATABASE_NAME || 'nestjs-db';
export const DATABASE_SYNCHRONIZE: boolean =
  Boolean(process.env.DATABASE_SYNCHRONIZE) || true;

.env

DATABASE_TYPE=mongodb
DATABASE_USERNAME=admin
DATABASE_PASSWORD=admin
DATABASE_HOST=mongodb+srv://steeve:s21a@graphql-0okgk.mongodb.net/test?retryWrites=true&w=majority
DATABASE_SYNCHRONIZE=true

【问题讨论】:

    标签: mongodb typescript nestjs typeorm


    【解决方案1】:

    我在 github 上发现了这个问题:https://github.com/typeorm/typeorm/issues/4267 我的解决方案是关闭同步选项(或完全删除它):

    synchronize: false
    

    【讨论】:

      【解决方案2】:

      useNewUrlParseruseUnifiedTopology 添加到true

      我在 AppModule 中的连接:

      TypeOrmModule.forRoot({
            type: config.DB_1_TYPE,
            host: config.DB_1_HOST,
            port: config.DB_1_PORT,
            database: config.DB_1_DATABASE,
            useNewUrlParser: true,
            useUnifiedTopology: true,
            entities: [
              'build/**/**.entity.js',
              '**/**.entity.js',
              'src/**/**.entity.js',
            ],
      

      还有我的 .env:

      DB_1_URI=mongodb://localhost:27067
      DB_1_TYPE=mongodb
      DB_1_HOST=localhost
      DB_1_DATABASE=my-database
      DB_1_USERNAME=root
      DB_1_PASSWORD=root
      DB_1_PORT=27067
      

      【讨论】:

        猜你喜欢
        • 2011-05-12
        • 2022-06-22
        • 2021-08-28
        • 2011-08-21
        • 2023-03-25
        • 2016-10-21
        • 2015-08-08
        • 1970-01-01
        • 2023-02-03
        相关资源
        最近更新 更多