반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- html5디자인예제
- 이중화
- PostgresSQL
- 포트폴리오예제
- pgpool
- 웹예제
- html5예제
- html5웹디자인예제
- 서버
- grpc
- NFT솔라나
- 솔라나
- html5popup
- 웹디자인예제
- 포트폴리오
- HTML5
- 솔라나cookbook
- NFT개발
- html5포트폴리오예제
- nft예제
- solanaNFT
- 솔라나NFT
- html5기초
- html5웹디자인
- html5배경만들기
- html5글자효과
- 솔라나개발
- 웹디자인
- html5기초예제
- NFT
Archives
- Today
- Total
Scikit Web
NestJS TypeORM DataSource 연동 본문
728x90
반응형
nestjs typeorm 의 경우 공식적으로 아직까진 버전 2를 공식적으로 권장하고 있다.
https://docs.nestjs.com/techniques/database
하지만 .. typeorm 버전 2에서는 DB를 한개만 쓰는 경우에는 문제없이 사용할수 있지만..
동적으로 여러개의 DB를 사용해야 되는 상황이 된다면 대단히 불편하다.
그래서 그런지는 모르겠지만.. 자바 처럼 DataSource 개념이 추가 되었고.. 사용하는 방법도 많이 변경 되었다.
기본 DB의 경우 버전 2의 방법으로 그대로 사용하고..
App.ts
TypeOrmModule.forRoot({
type: "mariadb",
host: process.env.DATABASE_HOST,
port: parseInt(process.env.DATABASE_PORT) || 3306,
username: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE_NAME,
entities: ["dist/**/*.entity{.ts,.js}"],
synchronize: true,
}),
DataSource 방법의 경우 Singleton 클래스를 만들어서 사용한다.
import { DataSource, DataSourceOptions } from "typeorm";
export default class DataSourceService {
private dataSource: any;
private constructor() {}
public static async getInstance() {
let dataSourceService: any = new DataSourceService();
const option: DataSourceOptions = {
type: "mariadb",
host: process.env.DATABASE_HOST,
port: parseInt(process.env.DATABASE_PORT) || 3306,
username: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE_NAME,
entities: ["dist/**/*.entity{.ts,.js}"],
synchronize: true,
};
return await dataSourceService.setDataSource(option);
}
async setDataSource(option: DataSourceOptions) {
if (this.dataSource?.isInitialized) {
await this.dataSource.destroy();
}
this.dataSource = new DataSource(option);
}
async getDataSource() {
if (!this.dataSource?.isInitialized) {
await this.dataSource?.initialize();
}
return this.dataSource;
}
static async getDataSource() {
const dataSourceService: any = await DataSourceService.getInstance();
return await dataSourceService.getDataSource();
}
}
불러와서 사용할때는 아래와 같이 사용한다
const dataSource = await DataSourceService.getDataSource();
await dataSource.manager
.createQueryBuilder()
.update(Entity)
.set(Object)
.execute();
728x90
반응형
Comments