nestjs의 모듈 정의를 간소화하다

8213 단어 NestJSTypeScript
Anglar와 NestJS의 모듈을 정의할 때 여러 종류를 가져와 Provider와 Import에 로그인할 수 있습니다.폴더의 구성에 따라 쉽게 만들 수 있는 방법이 있습니다.

폴더 구성


일반적인지는 모르겠지만 폴더를 각 컨트롤러 실체 서비스로 나누어 각자index.ts에서 같은 종류별로 정의하고 export의 폴더 구조를 합쳐 봤다.

각 폴더의 index.ts는 다음과 같습니다.
controllers/index.ts
export * from './location.controller';
export * from './item.controller';

모듈 정의


위 폴더 구조의 경우 import * as Services from './services'만 썼고 ServicesItemService,LocationService라는 구성원에 각각의 분류 정의를 저장한다=Function형(생략원).함수ToArray를 이용하여 배열하면 모듈 정의에 사용할 수 있습니다.
목표 실체와 서비스가 증가하더라도 코드는 바꿀 필요가 없기 때문에 조금 수월할 수 있다.
또한 실체의 배열은 나중에 사용하고자 하기 때문에 미리 모듈의 정적 구성원으로 한다.
controllers/index.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

import * as Services from './services';
import * as Entities from './entities';
import * as Controllers from './controllers';

function ToArray( obj: Object ) {
    return Object.keys( obj ).map( key => obj[key] );
}

const EntityArray = ToArray( Entities );

@Module( {
    imports: [ TypeOrmModule.forFeature( EntityArray ) ],
    providers: ToArray( Services ),
    controllers: ToArray( Controllers ),
} )
export class InventryModule {
    static readonly Entities = EntityArray;
}
ToAray의 프로토타입: Javascript, Converting an Object to an Array of Objects.

데이터베이스 정의에 사용


NestJS의 TypeOrmModule에서forRot에서 데이터베이스에서 처리되는 실체를 지정해야 합니다.만약 와일드카드 파일 경로를 사용하여 지정할 수도 있습니다. 방금 준비한 InventryModule.Entities 정적 구성원을 사용한다면 다음과 같이 쓸 수 있다.이렇게 하면 파일을 이동하는 데도 영향을 주지 않는다.
app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { InventryModule } from './inventry';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
    imports: [ 
        TypeOrmModule.forRoot( {
            type: 'sqlite',
            database: 'db/sqlite.db',
            synchronize: true,
            entities: [ ...InventryModule.Entities ]
        } ), InventryModule
    ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

좋은 웹페이지 즐겨찾기