typescript 是否将Ormconfig转换为类型为orm 0.3的数据源?

szqfcxe2  于 2022-12-05  发布在  TypeScript
关注(0)|答案(1)|浏览(180)

我有一个使用TypeScriptNestJStypeorm的API项目。
我使用的是typeorm版本0.2,但由于安全问题,我不得不升级到版本0.3,并且有很多变化。现在我不确定我是否正确理解了DataSource,我以前没有使用过。
之前我使用的是ormconfig.ts文件,而不是json:

// ormconfig.ts

import "dotenv/config";
import * as path from "path";
import { ConnectionOptions } from "typeorm";

const connectionOptions: ConnectionOptions = {
    type: "postgres",
    host: process.env.TYPEORM_HOST,
    port: parseInt(process.env.TYPEORM_PORT as string),
    username: process.env.TYPEORM_USERNAME,
    password: process.env.TYPEORM_PASSWORD,
    database: process.env.TYPEORM_DATABASE,
    entities: [path.join(__dirname, "**", "*.entity.{ts,js}")],
    cache: true,
    synchronize: false,
    migrationsRun: false,
    migrations: ["build/src/migration/*.js"],
    cli: {
        migrationsDir: "./migration",
    },
};

export = connectionOptions;

app.module.ts中使用它,如下所示:

// app.module.ts

import connectionOptions = require("./ormconfig");

@Module({
    imports: [
        TypeOrmModule.forRoot(connectionOptions),
    ],
})
export class AppModule {}

如果我需要一个事务,我使用了Injection:

// my-entity.service.ts

@Injectable()
export class MyEntityService {
    constructor(
        @InjectRepository(MyEntity)
        @InjectConnection() private connection: Connection
    ) {}
}

但是现在Connection被取消了,cli属性对于PostgreSQL不可用,您应该使用DataSource
我现在这样做,并像以前一样在app.module.ts中使用此连接:

// ormconfig.ts

import "dotenv/config";
import * as path from "path";
import { PostgresConnectionOptions } from "typeorm/driver/postgres/PostgresConnectionOptions";

const connectionOptions: PostgresConnectionOptions = {
    type: "postgres",
    host: process.env.TYPEORM_HOST,
    port: parseInt(process.env.TYPEORM_PORT as string),
    username: process.env.TYPEORM_USERNAME,
    password: process.env.TYPEORM_PASSWORD,
    database: process.env.TYPEORM_DATABASE,
    entities: [path.join(__dirname, "**", "*.entity.{ts,js}")],
    logging: process.env.TYPEORM_LOGGING === "true",
    cache: true,
    // Migrations
    synchronize: false,
    migrationsRun: false,
    migrations: ["build/src/migration/*.js"],
};

export = connectionOptions;

我添加了一个data-source.ts

// data-source.ts

import { DataSource } from "typeorm";
import connectionOptions = require("./ormconfig");

export const AppDataSource = new DataSource(connectionOptions);

我已将Connection更改为DataSource

// my-entity.service.ts

@Injectable()
export class MyEntityService {
    constructor(
        @InjectRepository(MyEntity)
        @InjectConnection() private dataSource: DataSource
    ) {}
}

由于ConnectionOptions中缺少cli属性,我现在使用的是带有迁移路径和数据源的新CLI命令,而不是旧的ormconfig文件:

typeorm migration:generate ./src/migrations/update-my-entity-table -d ./src/data-source.ts

看起来一切正常。这是正确的方法吗?@InjectConnection()和从ConnectionDataSource的更改是否完成了我需要的所有工作?因为我从来没有在任何地方使用导出的AppDataSource
我也没有像typeorm文档所说的那样在任何地方使用[import reflect-metadata][1]
我错过了什么吗?

axr492tv

axr492tv1#

Nest将接受您传递的选项并创建一个DataSource示例,因此@InjectDataSource()仍然可以正常工作。
此外,@nestjs/common导入reflect-metadata,因此您也不必担心这一点。

相关问题