使用 ormconfig.json
从配置文件创建新连接
大多数情况下,我们希望将连接选项存储在单独的配置文件中,因为此方式使管理变得更方便和容易。 TypeORM 支持多个配置源。你只需要在应用程序的根目录(package.json
附近)中创建一个ormconfig.[format]
文件存放连接配置,并在应用程序中调用createConnection()
,而不传递任何参数配置:
import { createConnection } from "typeorm";
// createConnection方法会自动读取来自ormconfig文件或环境变量中的连接选项
const connection = await createConnection();
支持的 ormconfig 文件格式有:.json
, .js
, .env
, .yml
和 .xml
.
使用ormconfig.json
在项目根目录(package.json
附近)中创建ormconfig.json
,并包含以下内容:
{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "test",
"password": "test",
"database": "test"
}
你可以参考ConnectionOptions来设置其他选项。
如果要创建多个连接,则只需在数组中添加多个连接:
[
{
"name": "default",
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "test",
"password": "test",
"database": "test"
},
{
"name": "second-connection",
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "test",
"password": "test",
"database": "test"
}
]
使用ormconfig.js
在项目根目录(package.json
附近)中创建ormconfig.js
,并包含以下内容:
module.exports = {
type: "mysql",
host: "localhost",
port: 3306,
username: "test",
password: "test",
database: "test"
};
你可以参考ConnectionOptions来设置其他选项。
如果要创建多个连接,则只需在数组中添加多个连接:
使用环境变量
在项目根目录(package.json
附近)中创建.env
或者 ormconfig.env
,并包含以下内容:
TYPEORM_CONNECTION = mysql
TYPEORM_HOST = localhost
TYPEORM_USERNAME = root
TYPEORM_PASSWORD = admin
TYPEORM_DATABASE = test
TYPEORM_PORT = 3000
TYPEORM_SYNCHRONIZE = true
TYPEORM_LOGGING = true
TYPEORM_ENTITIES = entity/.*js,modules/**/entity/.*js
可以设置的可用 env 变量列表:
- TYPEORM_CONNECTION
- TYPEORM_HOST
- TYPEORM_USERNAME
- TYPEORM_PASSWORD
- TYPEORM_DATABASE
- TYPEORM_PORT
- TYPEORM_URL
- TYPEORM_SID
- TYPEORM_SCHEMA
- TYPEORM_SYNCHRONIZE
- TYPEORM_DROP_SCHEMA
- TYPEORM_MIGRATIONS_RUN
- TYPEORM_ENTITIES
- TYPEORM_MIGRATIONS
- TYPEORM_SUBSCRIBERS
- TYPEORM_ENTITY_SCHEMAS
- TYPEORM_LOGGING
- TYPEORM_LOGGER
- TYPEORM_ENTITY_PREFIX
- TYPEORM_MAX_QUERY_EXECUTION_TIME
- TYPEORM_ENTITIES_DIR
- TYPEORM_MIGRATIONS_DIR
- TYPEORM_SUBSCRIBERS_DIR
- TYPEORM_DRIVER_EXTRA
ormconfig.env
只能在开发期间使用。在生产环境中,你可以在 ENVIRONMENT VARIABLES 中设置所有这些值。
你无法使用env
文件或环境变量定义多个连接。如果你的应用需要有多个连接,请使用其他配置替代。
使用ormconfig.yml
在项目根目录(package.json
附近)中创建ormconfig.yml
,并包含以下内容:
default: # 默认连接
host: "localhost"
port: 3306
username: "test"
password: "test"
database: "test"
second-connection: # 其他连接
host: "localhost"
port: 3306
username: "test"
password: "test"
database: "test2"
你可以使用任一连接。
使用ormconfig.xml
在项目根目录(package.json
附近)中创建ormconfig.xml
,并包含以下内容:
<connections>
<connection type="mysql" name="default">
<host>localhost</host>
<username>root</username>
<password>admin</password>
<database>test</database>
<port>3000</port>
<logging>true</logging>
</connection>
<connection type="mysql" name="second-connection">
<host>localhost</host>
<username>root</username>
<password>admin</password>
<database>test2</database>
<port>3000</port>
<logging>true</logging>
</connection>
</connections>
你可以使用任何可用的连接选项。
Typeorm使用哪个配置文件
有时你可能希望使用不同格式的多个配置。 当调用getConnectionOptions()
或尝试在没有连接选项的情况下使用createConnection()
时,Typeorm将尝试按以下顺序加载配置:
- 来自环境变量。 Typeorm将尝试使用dotEnv加载
.env
文件(如果存在)。 如果设置了环境变量TYPEORM_CONNECTION
或TYPEORM_URL
,Typeorm将使用此方法。 - 来自
ormconfig.env
。 - 从另一个
ormconfig.[format]
文件,按此顺序:[js,ts,json,yml,yaml,xml]
。
注意,Typeorm将使用找到的第一个有效方法,而不会加载其他方法。 例如,如果在环境中找到配置,Typeorm将不会加载ormconfig.[format]
文件。
覆盖ormconfig中定义的选项
有时你希望覆盖 ormconfig 文件中定义的值,或者可能会在配置中附加一些 TypeScript / JavaScript 逻辑。
在这种情况下,你可以从 ormconfig 加载选项并构建ConnectionOptions
,然后在将它们传递给createConnection
函数之前,使用这些选项执行任何操作:
// 从ormconfig文件(或ENV变量)读取连接选项
const connectionOptions = await getConnectionOptions();
// 使用connectionOptions做一些事情,
// 例如,附加自定义命名策略或自定义记录器
Object.assign(connectionOptions, { namingStrategy: new MyNamingStrategy() });
// 使用覆盖后的连接选项创建连接
const connection = await createConnection(connectionOptions);