inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

@JoinColumn() 관련 오류

591

최학열

작성한 질문수 1

0

@JoinColumn()
@OneToOne(() => ProductSalesLocation)
productSaleslocation: ProductSalesLocation;

 

코드가 들어가면

 

import { JoinColumn, JoinTable } from 'typeorm/browser';

 

위 처럼 import가 되고 아래와 같은 오류가 뜹니다. Join Column OneToOne 부분만 지우고 코드를 돌리면 잘 돌아가는데, 저것을 추가하는 순간 아래와 같은 오류가 뜹니다. 이유를 알 수 있을까요?

 

16-01-mysql-relation2/node_modules/typeorm/browser/index.js:3

import "reflect-metadata";

^^^^^^

SyntaxError: Cannot use import statement outside a module

at internalCompileFunction (node:internal/vm:73:18)

at wrapSafe (node:internal/modules/cjs/loader:1176:20)

at Module._compile (node:internal/modules/cjs/loader:1218:27)

at Object.Module._extensions..js (node:internal/modules/cjs/loader:1308:10)

at Module.load (node:internal/modules/cjs/loader:1117:32)

at Function.Module._load (node:internal/modules/cjs/loader:958:12)

at Module.require (node:internal/modules/cjs/loader:1141:19)

at require (node:internal/modules/cjs/helpers:110:18)

at Object.<anonymous> (/Users/hychoi/WebstormProjects/backend-study/class/16-01-mysql-relation2/src/apis/products/entities/product.entity.ts:3:1)

at Module._compile (node:internal/modules/cjs/loader:1254:14)

 

 

javascript node.js express docker tdd rest-api nestjs

답변 1

1

노원두

안녕하세요! 학열님!

 

먼저, @JoinColumn과 @OneToOne 을 지우고 실행하셨을 때 잘 돌아갔던 이유는, 사실 정상 작동한 것이 아니라 테이블을 만드는 작업과 관련된 그 어떤 작업도 진행하지 않았기 때문에 잘 돌아갔던 것이랍니다.

먼저, 해결 방법부터 말씀 드리면 "typeorm/browser" 부분을 "typeorm" 으로 변경해 주세요

 

 

잘 해결이 되었나요?!

그러면, 같이 한 번 문제를 찾아 볼 까요!

에러 메시지를 다시 한 번 보면 import는 쓸 수 없다는 것 같아요!

import "reflect-metadata";

^^^^^^

SyntaxError: Cannot use import statement outside a module

 

이유는 "typeorm/browser"와 "typeorm" 둘 모두 비슷한 구조를 이루고 있으나 내부적으로는 약간 다릅니다.

"typeorm/browser"는 내부적으로 다른 모듈을 불러올 때 module 방식(import)을 사용하고 있고,

"typeorm"은 내부적으로 다른 모듈을 불러올 때 commonjs 방식(require)을 사용하고 있어요!

아래는 실제 node_modules에 다운로드 받아져 불러와지는 소스코드 사진입니다.

image

사진을 보시면, 왼쪽은 node_modules에 있는 "typeorm/browser" 폴더 내의 파일이고 오른쪽은 "typeorm" 폴더 내의 파일입니다.

왼쪽은 module(import) 방식을 사용하고 있지만, 오른쪽은 commonjs(require) 방식을 사용하고 있네요!

 

참고로, 우리가 작성한 nestjs의 코드는 실행시 다음의 몇 가지 변경 절차를 거치게 됩니다.(dist 폴더에 만들어져요!)

  1. typescript => javascript로 변경

  2. module(import) => commonjs(require)로 변경

따라서, 변경 작업을 거쳐 최종적으로 실행되는 코드들은 commonjs 방식의 코드들로 이루어져 있어요!

 

이 흐름에 맞게, 우리가 작성하지 않은 nestjs 코드도 module(import) 방식을 사용하고 있는 "typeorm/browser"가 아니라, commonjs(require)를 사용하고 있는 "typeorm"을 사용해 주셔야 합니다!

그래프 ql 문서 사용할때 느낌표 남는거 어떻게 없애나요?

0

86

2

강의 전체 소스 코드를 받고싶습니다.

0

77

2

fontawesome 사용 문의

0

80

2

소스 코드 부탁드립니다~

0

87

2

깃 레포지터리 소스

0

87

2

커리큘럼12.css 정렬 에 나오는 과제 정답알고싶어요

0

74

2

10-01 Entity TypeOrmModule.forRoot 에 entities

0

89

3

강의 버전관련 문의입니다

0

104

2

Ubuntu 설치 관련

0

62

1

schema.gql 질문 드립니다.

0

51

1

서버 재실행시 Many to Many

0

102

3

input 관련 문의

0

90

2

Rest API 보다는 graphql이 주된 내용인데

0

133

2

강의 전체 소스코드 받을수있을까요?

0

156

1

도커볼륨 마운트 관련

0

127

2

findOne 타입스크립트오류

0

109

1

http => htrtps 호출 인증서 신뢰 오류

0

356

1

self-signed certificate in certificate chain 에러 발생

0

421

1

mongoose 설치 오류

0

143

1

특정 API, 특정 IP 허용 (단일경로에 CORS 활성화)

0

285

2

08-06

0

180

3

구조랑 패턴 관련해서 질문

0

126

2

mydocker

0

129

2

coolsms statuscode 2000 인데 전송안돼는 경우 확인.

0

156

1