typeorm synchronize= true not working
来源:8-6 使用TypeOrm创建多个实体&创建1对1关系

小狗会飞
2023-05-19
问题 :
typeorm 设置 synchronize= true 但 npm run start:dev
启动项目 数据库并没有对应entity的数据表
启动时候 typeorm的日志:
config {
DB_TYPE: 'mysql',
DB_HOST: '127.0.0.1',
DB_PORT: '3307',
DB_USERNAME: 'root',
DB_DATABASE: 'testdb',
DB_PASSWORD: 'example',
DB_SYNC: 'true',
LOG_ON: 'false',
LOG_LEVEL: 'info',
TIMESTAMP: 'true',
APP_PORT: '3000',
REDIS_HOST: 'localhost',
REDIS_PORT: '6379',
REDIS_PASSWORD: '',
REDIS_RECONNECT: 'true',
SECRET: 'mHgGuoJYOuiXILqnXyqKQ1joRQ6YhoPBb6CUfVp6qi1BBK2rtQNjsgaxRxRAsOii'
}
[Nest] 93280 - 2023/05/19 上午8:39:51 LOG [NestFactory] Starting Nest application...
[Nest] 93280 - 2023/05/19 上午8:39:52 LOG [InstanceLoader] RedisModule dependencies initialized +144ms
[Nest] 93280 - 2023/05/19 上午8:39:52 LOG [InstanceLoader] TypeOrmModule dependencies initialized +5ms
ormconfig.ts
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import { DataSource, DataSourceOptions } from 'typeorm';
import * as fs from 'fs';
import * as dotenv from 'dotenv';
import { ConfigEnum } from './src/enum/config.enum';
// 通过环境变量读取不同的.env文件
export function getEnv(env: string): Record<string, unknown> {
if (fs.existsSync(env)) {
return dotenv.parse(fs.readFileSync(env));
}
return {};
}
export function getServerConfig() {
const defaultConfig = getEnv('.env');
const envConfig = getEnv(`.env.${process.env.NODE_ENV || 'development'}`);
// configService
const config = { ...defaultConfig, ...envConfig };
return config;
}
// 通过dotENV来解析不同的配置
export function buildConnectionOptions() {
const defaultConfig = getEnv('.env');
const envConfig = getEnv(`.env.${process.env.NODE_ENV || 'development'}`);
// configService
const config = { ...defaultConfig, ...envConfig };
const logFlag = config['LOG_ON'] === 'true';
const entitiesDir =
process.env.NODE_ENV === 'development'
? [__dirname + '/**/*.entity.ts']
: [__dirname + '/**/*.entity{.js,.ts}'];
console.log('config', config)
return {
type: config[ConfigEnum.DB_TYPE],
host: config[ConfigEnum.DB_HOST],
port: config[ConfigEnum.DB_PORT],
username: config[ConfigEnum.DB_USERNAME],
password: config[ConfigEnum.DB_PASSWORD],
database: config[ConfigEnum.DB_DATABASE],
entities: entitiesDir,
// 同步本地的schema与数据库 -> 初始化的时候去使用
synchronize: true,
logging: logFlag && process.env.NODE_ENV === 'development',
// logging: false,
} as TypeOrmModuleOptions;
}
export const connectionParams = buildConnectionOptions();
export default new DataSource({
...connectionParams,
migrations: ['./dist/src/migrations/**'],
subscribers: [],
} as DataSourceOptions);
docker-compose.yml
db:
image: mysql
# NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
# (this is just an example, not intended to be a production configuration)
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: testdb
# MYSQL_USER MYSQL_PASSWORD
ports:
- 3307:3306
typeorm 相关包的版本:
"@nestjs/typeorm": "^9.0.1",
"typeorm": "0.3.12",
ps: 能通过 npm run migration:run
导入数据
data里面没表格,npm run start:dev
重启也没有:
写回答
1回答
-
Brian
2023-05-19
尝试删除数据库中的表格,再次启动调试进程没有?
022023-05-22
相似问题