使用TypeOrm连接到MongoDB Atlas吗?

时间:2019-06-27 16:10:45

标签: mongodb typeorm mongodb-atlas

我正在尝试使用TypeOrm连接到Mongodb Atlas。

这是我的ormconfig.json

{
  "type": "mongodb",
  "host": "cluster0-****.mongodb.net",
  "port": 27017,
  "username": "testUser",
  "password": "******",
  "database": "test",
  "useNewUrlParser": true,
  "synchronize": true,
  "logging": true,
  "entities": ["src/entity/*.*"]
}

然后当我尝试createConnection()时出现此错误: (node:10392) UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [cluster0-****.mongodb.net:27017] on first connect [MongoNetworkError: getaddrinfo ENOTFOUND cluster0-****.mongodb.net cluster0-****.mongodb.net:27017]

实际上我找不到有关如何执行此操作的任何信息。

我的港口正确吗?如果不是,我在哪里可以找到它?在哪里可以找到我在Atlas上的数据库名称?

3 个答案:

答案 0 :(得分:3)

对于mongodb连接问题,TYPEORM文档不太清楚,并且可能不经常更新。因此,我将其放在此处供以后的读者使用。

  1. 您需要确保IP已列入白名单。 (您可以通过转到project => network access [tab] => IP whitelist [tab]add your ip address或使用0.0.0.0来实现。
  2. 通过在orm配置文件中设置ssl:true为连接启用SSL。
  3. 请不要忘记使用authSource:admin添加身份验证数据库。

下面是我的.env文件的示例

TYPEORM_CONNECTION=mongodb
TYPEORM_HOST=cluster0-shard-00-02-xxxxx.mongodb.net
TYPEORM_PORT=27017
TYPEORM_USERNAME=root
TYPEORM_PASSWORD=password
TYPEORM_DATABASE=mydatabase
TYPEORM_SYNCHRONIZE=true
TYPEORM_LOGGING=true
TYPEORM_ENTITIES=./dist/**/*.entity.js
TYPEORM_DRIVER_EXTRA={"ssl":true, "authSource": "admin"}

答案 1 :(得分:0)

好吧,我这样做是解决了

{
  "type": "mongodb",
  "url": "mongodb+srv://testUser:<password>@cluster0-****.mongodb.net/test?retryWrites=true&w=majority",
  "useNewUrlParser": true,
  "synchronize": true,
  "logging": true,
  "entities": ["src/entity/*.*"]
}

我真的不知道“ field by field”配置有什么问题,但通过传递URL似乎可以正常工作。

答案 2 :(得分:0)

您可以直接在 app.module.ts 中执行此操作,在我的情况下,我已将其分配到 localhost 上,并使用名为 db_test 的数据库。但首先,您需要在系统上安装 MongoDBExample on github

import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { TypeOrmModule } from '@nestjs/typeorm';
import { join } from 'path';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
import { TaskModule } from './task/task.module';

@Module({
  imports: [ GraphQLModule.forRoot({
    autoSchemaFile: join(process.cwd(), 'src/schema.gql'),
  }),
  TypeOrmModule.forRoot({
    type: 'mongodb',
    host: 'localhost',
    port: 27017,
    database: 'db_test',
    synchronize: true,
    logging: false,
    entities: ['dist/**/*.entity{.ts,.js}'],
    
  }),
  UserModule,
  TaskModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}