‘nest new’명령으로 새 프로젝트를 시작했습니다. 엔터티 파일을 추가 할 때까지 제대로 작동합니다.
다음 오류가 발생했습니다.
‘typeorm’에서 import {Entity, Column, PrimaryGeneratedColumn};
^^^^^^
구문 오류 : 모듈 외부에서 import 문을 사용할 수 없습니다
내가 무엇을 그리워합니까?
모듈에 엔티티 추가 :
import { Module } from '@nestjs/common';
import { BooksController } from './books.controller';
import { BooksService } from './books.service';
import { BookEntity } from './book.entity';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [TypeOrmModule.forFeature([BookEntity])],
controllers: [BooksController],
providers: [BooksService],
})
export class BooksModule {}
app.module.ts :
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Connection } from 'typeorm';
import { BooksModule } from './books/books.module';
@Module({
imports: [TypeOrmModule.forRoot()],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
답변
내 가정은 다음과 같은 속성을 TypeormModule
가진 구성 이 있다고 가정 entities
합니다.
entities: ['src/**/*.entity.{ts,js}']
또는 좋아
entities: ['../**/*.entity.{ts,js}']
오류 ts
는 js
컨텍스트 에서 파일 을 가져 오려고하기 때문에 발생합니다 . webpack을 사용하지 않는 한 올바른 파일을 얻을 수 있도록 대신 이것을 사용할 수 있습니다
entities: [join(__dirname, '**', '*.entity.{ts,js}`)]
여기서 모듈 join
에서 가져옵니다 path
. 지금 __dirname
에 해결할 src
또는 dist
후 예상 검색 ts
또는 js
파일을 각각. 여전히 문제가 발생하면 알려주세요.
1/10/2020 수정
위의 구성은 자바 스크립트 호환 파일 ( .js
또는 TypeormModule.forRoot()
전달 된 매개 변수) 로 수행되었다고 가정합니다 . ormconfig.json
대신 에 사용하는 경우
entities: ['dist/**/*.entity.js']
컴파일 된 js 파일을 사용하고 코드에서 ts 파일을 사용할 기회가 없도록하십시오.
답변
Jay McDoniel이 그의 답변에서 설명했듯이, 문제는 파일에서 엔티티 파일의 패턴 일치로 보인다 ormconfig.json
: 아마도 타입 스크립트 파일 (모듈)은 자바 스크립트 파일 (아마도 이전에 변환 된 타입 스크립트 파일)에서 가져 오는 것 같습니다.
TypeORM이 자바 스크립트 파일 만로드 할 수 있도록 ts
에서 기존 glob 패턴 을 제거하면 충분 ormconfig.json
합니다. 엔티티 파일의 경로는 노드가 실행되는 작업 디렉토리에 상대적이어야합니다.
"entities" : [
"dist/entity/**/*.js"
],
"migrations" : [
"dist/migration/**/*.js"
],
"subscribers": [
"dist/subscriber/**/*.js"
],
답변
TypeORM 설명서에서 Typescript에 대한 특정 섹션을 찾았습니다 .
이 섹션은 말합니다 :
전역 적으로 ts-node를 설치하십시오.
npm install -g ts-node
package.json의 스크립트 섹션에서 typeorm 명령 추가
"scripts" { ... "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js" }
그런 다음 다음과 같이 명령을 실행할 수 있습니다.
npm run typeorm migration:run
npm 스크립트에 대시를 사용하여 매개 변수를 전달해야하는 경우-뒤에 추가해야합니다. 예를 들어, 생성해야하는 경우 명령은 다음과 같습니다.
npm run typeorm migration:generate -- -n migrationNameHere
이것은 내 파일 구성에서 작동합니다.
{
"type": "postgres",
"host": "yourhost",
"port": 5423,
"username": "username",
"password": "password",
"database": "your_db",
"synchronize": true,
"entities": [
"src/modules/**/*.entity.{ts,js}"
],
"migrations": [
"src/migrations/**/*.{ts,js}"
],
"cli": {
"entitiesDir": "src/modules",
"migrationsDir": "src/migrations"
}
}
그런 다음 generate 명령을 실행할 수 있습니다.
답변
앱의 모든 섹션에 대해 something.module.ts가 있어야합니다. Angular처럼 작동합니다. 이것은 GraphQL 리졸버 및 서비스로 설정됩니다. REST는 컨트롤러와 약간 다릅니다. 각 모듈에는 엔터티가 있고 GraphQL 인 경우 projects.schema.graphql이있을 것입니다.
projects.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ProjectsService } from './projects.service';
import { Projects } from './projects.entity';
import { ProjectsResolvers } from './projects.resolvers';
@Module({
imports: [
TypeOrmModule.forFeature([Projects])],
providers: [
ProjectsService,
ProjectsResolvers
],
})
export class ProjectsModule {}
답변
