nestjs의 모듈 정의를 간소화하다
8213 단어 NestJSTypeScript
폴더 구성
일반적인지는 모르겠지만 폴더를 각 컨트롤러 실체 서비스로 나누어 각자index.ts
에서 같은 종류별로 정의하고 export의 폴더 구조를 합쳐 봤다.
각 폴더의 index.ts
는 다음과 같습니다.
controllers/index.tsexport * from './location.controller';
export * from './item.controller';
모듈 정의
위 폴더 구조의 경우 import * as Services from './services'
만 썼고 Services
ItemService
,LocationService
라는 구성원에 각각의 분류 정의를 저장한다=Function형(생략원).함수ToArray
를 이용하여 배열하면 모듈 정의에 사용할 수 있습니다.
목표 실체와 서비스가 증가하더라도 코드는 바꿀 필요가 없기 때문에 조금 수월할 수 있다.
또한 실체의 배열은 나중에 사용하고자 하기 때문에 미리 모듈의 정적 구성원으로 한다.
controllers/index.tsimport { 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.tsimport { 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 {}
Reference
이 문제에 관하여(nestjs의 모듈 정의를 간소화하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/stm32p103/items/0140a5f5fb8b616e3ca0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
export * from './location.controller';
export * from './item.controller';
위 폴더 구조의 경우
import * as Services from './services'
만 썼고 Services
ItemService
,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.tsimport { 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 {}
Reference
이 문제에 관하여(nestjs의 모듈 정의를 간소화하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/stm32p103/items/0140a5f5fb8b616e3ca0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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 {}
Reference
이 문제에 관하여(nestjs의 모듈 정의를 간소화하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/stm32p103/items/0140a5f5fb8b616e3ca0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)