1. MikroORM Setup
2020-09-24
MikroOrm은 Data Mapper, Unit of Work, Identity Map pattern에 기반한
Node.js용 TypeScript ORM이다.
yarn add @mikro-orm/core @mikro-orm/cli @mikro-orm/migrations
yarn add @mikro-orm/postgresql pg
설치 후 package.json에 설정을 추가하고
"mikro-orm": {
"useTsNode":true,
"configpaths": [
"./src/mikro-orm.config.ts",
"./dist/mikro-orm.config.js"
]
}
mikro-orm.config.ts파일을 생성한다.
1.
index.ts
import { MikroORM } from "@mikro-orm/core";
const main = async () => {
const orm = await MikroORM.init({
migrations: {
path: path.join(__dirname, "./migrations"),
pattern: /^[\w-]+\d+\.[tj]s$/,
},
entities: [], //psql로 정의한 테이블
dbName: "testdb1",
user: "postgres",
password: "postgres",
type: "postgresql",
debug: !__prod__,
});
};
constants.ts
export const __prod__ = process.env.NODE_ENV === "production";
debug 옵션을 true로 설정하면 MikroOrm은 console.log()를
사용해 모든 쿼리를 dump한다.
mikro-orm.config.ts
export default {
migrations: {
path: path.join(__dirname, "./migrations"),
pattern: /^[\w-]+\d+\.[tj]s$/,
},
entities: [Post, User],
dbName: "testdb1",
user: "postgres",
password: "postgres",
type: "postgresql",
debug: !__prod__,
} as Parameters<typeof MikroORM.init>[0];
MikroOrm.init의 parm을 mikro-orm.config.ts로 옮긴다.
index.ts
import mikroConfig from "./mikro-orm.config";
const main = async () => {
const orm = await MikroORM.init(mikroConfig);
await orm.getMigrator().up();
};
2.
entities/Post.ts
@ObjectType()
@Entity() //mikroOrm에게 entity임을 알려줌
export class Post {
@Field()
//decorator @Field로 테이블의 속성을 정의한다.
@PrimaryKey()
id!: number;
@Field(() => String)
@Property({ type: "date" })
createdAt = new Date();
@Field(() => String)
@Property({ type: "date", onUpdate: () => new Date() })
updatedAt = new Date();
@Field()
@Property({ type: "text" })
title!: string;
}
MikroORM.init의 entities:[]에 Post를 추가 후
migration:create를 실행하면 postgresql에 반영되고
migration 폴더에 query log 파일이 생성된다.
npx mikro-orm migration:create