TypeOrm - 如何将连接用作具有类型的独立对象?

时间:2017-02-12 10:51:37

标签: node.js typeorm

不用工作代码只是为了说明我想要实现的目标

某些连接文件

import { ConnectionManager } from 'typeorm';

const c = new ConnectionManager();
// user ormconfig.conf file
export const connection = c.createAndConnect();

在某些模型中使用

@Entity()
@Table("annual_incomes")
export class AnnualIncome
{
    @PrimaryGeneratedColumn()
    id: number;

    @Column({ length: 75 })
    variant: string;

    @Column("int")
    sort: number;

    @Column()
    is_active: boolean;
}

稍后在代码中的某个地方,我希望与所有类似的方法建立连接

import { connection } from 'someconnection';
import { AnnualIncome } from 'entities';

// some code here

api.get('/incomes', async(ctx) => {
    ctx.body = await connection.getRepository(AnnualIncome).find();
});

通常我从tsc收到.getRepository()中未找到connection方法的错误。但如果我这样做的话:

import { connection } from 'someconnection';
import { AnnualIncome } from 'entities';

// some code here

api.get('/incomes', async(ctx) => {
    ctx.body = await connection.then(async connection => {
       return await connection.getRepository(AnnualIncome).find();
    }
});

以上代码适用于定义,而tsc并未抱怨未使用的方法。 我希望避免额外定义connection.then(),并使用connection类型

中定义的所有方法获得<Connection>

感谢。

1 个答案:

答案 0 :(得分:10)

只需使用createConnection方法在引导应用程序时创建连接。稍后您可以使用getConnection()方法从任何地方访问您的连接:

import { AnnualIncome } from 'entities';
import { createConnection, getConnection } from 'typeorm';

// somewhere in your app, better where you bootstrap express and other things
createConnection(); // read config from ormconfig.json or pass them here

// some code here

api.get('/incomes', async(ctx) => {
    ctx.body = await getConnection().getRepository(AnnualIncome).find();
});

此外,您可以简单地使用getRepository方法,也可以从任何地方使用:

import { AnnualIncome } from 'entities';
import { getRepository } from 'typeorm';

// some code here

api.get('/incomes', async (ctx) => {
    ctx.body = await getRepository(AnnualIncome).find();
});