【发布时间】:2022-01-26 11:26:19
【问题描述】:
这里有点想法。我是 Nestjs(或一般的节点后端)世界的新手,直到与 db 有任何关系,这都是小菜一碟。
我已明确关闭同步:
.env
TYPEORM_CONNECTION=postgres
TYPEORM_HOST=redacted
TYPEORM_USERNAME=redacted
TYPEORM_PASSWORD=redacted
TYPEORM_DATABASE=redacted
TYPEORM_PORT=5432
TYPEORM_SYNCHRONIZE=false
我这样拉入所述 .env 文件:
const DatabaseConfig = () => ({
type: 'postgres',
host: process.env.TYPEORM_HOST,
port: parseInt(process.env.TYPEORM_PORT),
username: process.env.TYPEORM_USERNAME,
password: process.env.TYPEORM_PASSWORD,
database: process.env.TYPEORM_DATABASE,
logging: true,
entities: [
"dist/**/*.entity{.ts,.js}"
],
synchronize: process.env.TYPEORM_SYNCHRONIZE||false,
migrationsTableName: 'typeorm_migrations', // this field will be used to create the table by name of 'typeorm_migrations'. You can name it whatever you want. But make sure to use the sensible name
migrations: [
"dist/src/common/persistence/migrations/*{.ts,.js}" // This is the path to the migration files created by typeorm cli. You don't have to create dist folder. When you save file, compiled files will be stored in dist folder
],
cli: {
migrationsDir: "src/common/persistence/migrations" // This path will be used by typeorm cli when we create a new migration
}
});
export default DatabaseConfig;
通过“Appconfig”实例
const AppConfig = () => ({
environment: (process.env.NODE_ENVIRONMENT) ? process.env.NODE_ENVIRONMENT : 'development' ,
port: 3000,
database: {
...DatabaseConfig()
}
});
export default AppConfig;
像这样全部拉入 AppModule:
@Module({
imports: [
DemoModule,
CommonModule,
ConfigModule.forRoot(
{
isGlobal: false,
load: [AppConfig]
}),
TypeOrmModule.forRootAsync({
imports: [
ConfigModule
],
useFactory: (configService: ConfigService) => {
return configService.get<ConnectionOptions>('database');
},
inject: [
ConfigService
]
})
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
TypeORM 如何在 every 运行时使用我的实体文件夹中的实体创建一个表?
query: CREATE TABLE "basic_phone_check" ("id" SERIAL NOT NULL, "country" integer NOT NULL, "phoneNumber" character varying NOT NULL, "givenName" character
varying NOT NULL, "familyName" character varying NOT NULL, "dob" TIMESTAMP NOT NULL, "timeCreated" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), CONSTRAINT "PK_3c09423ecba40b5709e30b6061e" PRIMARY KEY ("id"))
非常感谢
【问题讨论】:
-
整体看起来还不错。几个问题和评论: - 为什么 TypeOrmModule 是异步加载的? - 您正在使用 typeorm 特定的 env 变量,这不一定是问题,但很难说 typeorm 对此做了什么,因为无论 nestjs 做什么,它都会选择它。 - 无论实体的数据库和配置状态如何,您发布的查询都是唯一创建的表? - 你如何“运行”这个?例如
nest start --watch? - 你有尝试过的动作的简短摘要吗?例如重新安装 node_modules,删除 dist 文件夹等。 -
嗨@Funonly,据我所知,同步 TypeORM forRoot 方法不会像我一样让您选择使用工厂(请随意证明相反)。我同意很难说出它的作用,但我忽略了它,因为它不太可能是问题的原因。不,这不是唯一的桌子; TypeORM 也会创建它的元数据表。然而,它是唯一创建的实体表,因为我只有一个注册实体。我已经使用nest start --watch 和nest start --debug --watch 运行它。没有不同。尚未重新安装 nm,但已删除 dist 文件夹。
标签: node.js postgresql nestjs typeorm node.js-typeorm