NestJS API не работает с MongoDB (ключи индекса не могут быть пустыми) - PullRequest
2 голосов
/ 22 октября 2019

Я хочу создать API с NestJS, используя TypeORM. Я использовал 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

1 Ответ

1 голос
/ 23 октября 2019

Добавить useNewUrlParser и useUnifiedTopology к 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
...