我正在尝试连接到MySQL。我已经在根目录的.env文件中定义了数据库连接变量,并且正在app.module.ts
文件中初始化连接。
我现在面临的唯一问题是使用CLI创建或运行迁移时,
我遵循typeorm docs here来配置连接,但是当我运行typeorm migrate:create -n myNewTable
时,它应该在指定目录中创建迁移文件,相反,它是在应用程序根目录中创建迁移文件,
类似地,我通过在-d
之后使用typeorm migrate:create
标志来指定目录来解决了这个问题,但是当我尝试运行迁移文件时,我得到了
在任何配置文件中均未找到连接选项。
这是我的app.module.ts文件。
TypeOrmModule.forRoot({
type: 'mysql',
host: process.env.TYPEORM_HOST,
port: parseInt(process.env.TYPEORM_PORT, 10),
username: process.env.TYPEORM_USERNAME,
password: process.env.TYPEORM_PASSWORD,
database: process.env.TYPEORM_DATABASE,
synchronize: false,
migrations: [process.env.TYPEORM_MIGRATIONS],
cli: {
migrationsDir: process.env.TYPEORM_MIGRATIONS_DIR,
},
logging: (process.env.TYPEORM_LOGGING === 'true') ? true : false,
entities: [__dirname + '/../**/*.entity{.ts,.js}'],
}),
这是我的.env文件
# use .ts for development, .js for production
TYPEORM_CONNECTION = mysql
TYPEORM_HOST = 127.0.0.1
TYPEORM_PORT = 3306
TYPEORM_USERNAME = <username>
TYPEORM_PASSWORD = <password>
TYPEORM_DATABASE = <dbname>
TYPEORM_SYNCHRONIZE = true
TYPEORM_MIGRATIONSRUN = true
TYPEORM_LOGGING = true
TYPEORM_ENTITIES = src/**/**.entity.ts
#TYPEORM_ENTITIES = src/**/**.entity.js
TYPEORM_SUBSCRIBERS = src/subscriber/*.ts
#TYPEORM_SUBSCRIBERS = src/subscriber/*.js
TYPEORM_MIGRATIONS = src/database/migration/*.ts
TYPEORM_MIGRATIONS_DIR = src/database/migration
TYPEORM_SUBSCRIBERS_DIR = src/subscriber
我们非常感谢您的帮助/提示。
答案 0 :(得分:7)
尝试在ormconfig.json或.env中更改您的实体目录,它对我有用:
"entities": ["dist/**/**.entity{.ts,.js}"]
答案 1 :(得分:0)
您可以尝试以下操作:我不使用.env文件,我直接使用配置文件,希望它可以为您服务。
创建config.ts文件
粘贴此:
export const MYSQL = {
HOST: 'localhost',
PORT: 3306,
USERNAME: 'db_user',
PASSWORD: 'db_pass',
DATABASE: 'db_name'
};
在文件中,是您的连接配置写的。就我而言,它是应用模块:
import { MYSQL } from './config/config';
TypeOrmModule.forRoot({
type: 'mysql',
host: MYSQL.HOST,
port: MYSQL.PORT,
username: MYSQL.USERNAME,
password: MYSQL.PASSWORD,
database: MYSQL.DATABASE,
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true,
}),
答案 2 :(得分:0)
您应该在项目根文件夹的ormconfig.json
中指定连接。
看起来像这样
{
"type": "postgres",
"host": "localhost",
"port": <port>,
"username": "",
"password": "",
"database": "",
"entities": ["dist/**/*.entity{.ts,.js}"],
"synchronize": true,
"logging": "all",
"migrations": [
"migrations/**/*.js"
],
"subscribers": [
"subscriber/**/*.js"
],
"cli": {
"migrationsDir": "<migrations directory>",
"subscribersDir": "<subscriber directory>"
}
}
在documentation一章中了解更多信息
另一方面,您可能必须删除 dist / 文件夹才能进行更改。
答案 3 :(得分:0)
有一个问题,您如何加载 **TypeOrmModule**
。您加载的方式是同步的,所以它只是意味着自定义 env
在应用程序启动时不会立即可用。
所以你可以做的是像下面这样异步加载TypeOrmModule` -
ConfigModule.forRoot({
isGlobal: true, // [REQUIRED if want to use env gloablly among all modules]
}),
TypeOrmModule.forRootAsync({
useFactory: () => ({
type: 'mysql',
host: process.env.TYPEORM_HOST,
port: parseInt(process.env.TYPEORM_PORT, 10),
username: process.env.TYPEORM_USERNAME,
password: process.env.TYPEORM_PASSWORD,
database: process.env.TYPEORM_DATABASE,
synchronize: false,
migrations: [process.env.TYPEORM_MIGRATIONS],
cli: {
migrationsDir: process.env.TYPEORM_MIGRATIONS_DIR,
},
logging: process.env.TYPEORM_LOGGING === 'true' ? true : false,
entities: [__dirname + '/../**/*.entity{.ts,.js}'],
}),
}),