使用 TypeOrm 连接到 MongoDB Atlas?
Connecting to MongoDB Atlas with TypeOrm?
我正在尝试使用 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 上哪里可以找到我的数据库名称?
好的,我解决了这个问题:
{
"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.
似乎可以正常工作
TYPEORM 文档在 mongodb 连接问题上不是很清楚,并且可能不经常更新。所以我把它放在这里供未来的读者使用。
- 您需要确保您的 IP 已列入白名单。 (您可以转到
project => network access [tab] => IP whitelist [tab]
和 add your ip address 或使用 0.0.0.0
.
- 通过在您的 orm 配置文件中设置
ssl:true
为您的连接启用 SSL。
- 不要忘记使用
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"}
使用 Nestjs
您可以直接在 app.module.ts
中执行此操作,我已指定在 localhost 上使用名为 db_test
的数据库就我而言。但首先,您需要在系统上安装 MongoDB
。 Example 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 {}
我正在尝试使用 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 上哪里可以找到我的数据库名称?
好的,我解决了这个问题:
{
"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.
似乎可以正常工作TYPEORM 文档在 mongodb 连接问题上不是很清楚,并且可能不经常更新。所以我把它放在这里供未来的读者使用。
- 您需要确保您的 IP 已列入白名单。 (您可以转到
project => network access [tab] => IP whitelist [tab]
和 add your ip address 或使用0.0.0.0
. - 通过在您的 orm 配置文件中设置
ssl:true
为您的连接启用 SSL。 - 不要忘记使用
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"}
使用 Nestjs
您可以直接在 app.module.ts
中执行此操作,我已指定在 localhost 上使用名为 db_test
的数据库就我而言。但首先,您需要在系统上安装 MongoDB
。 Example 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 {}