crypto is not defined
ec2에서 nestjs 프로젝트를 pm2로 실행하면 에러가 발생했다.
나의 경우는 nestjs-scheduler를 사용해서 크론잡 실행시 에러가 발생했다.
로컬에서 pm2를 실행했을 때는 발생하지 않았다.
비슷한 사례를 찾아 여러 시도를 해보았다.
https://github.com/typeorm/typeorm/issues/11270
ReferenceError: crypto is not defined when using TypeORM in Nest.js · Issue #11270 · typeorm/typeorm
Issue description I'm using @nestjs/typeorm with TypeOrmModule.forRootAsync() in a NestJS project. Expected Behavior Using @nestjs/typeorm with TypeOrmModule.forRootAsync(), the application should ...
github.com
- 노드 버전 업데이트
- 글로벌 변수 적용
- pm2 클러스터 관련 설정 적용
- Node 내장 crypto 이외 다른 lib 사용
- 사용중인 lib 최신버전으로 업데이트
모두 실패하고 아래 방법으로 성공했다.
// main.ts
import { webcrypto } from 'node:crypto';
Object.defineProperty(globalThis, 'crypto', {
get: () => webcrypto,
configurable: false,
});
- ec2의 nodejs 환경에서는 crypto가 기본적으로 정의 되지 않았다.
- crypto 속성에 webcrypto를 재지정한다.
- crypto에 접근할 때 마다, webcrypto API를 호출하게 한다.
ec2에서 정의되지 않은 crypto를 사용하려 하기 때문에 에러가 발생했다.
crypto를 webcrypto API로 지정한다.
crypto에 접근할 때 마다 브라우저의 webcrypto API와 연결하여 사용할 수 있게 바꿨다.
'Study > 에러 정리' 카테고리의 다른 글
NestJS) useGlobalFilters, APP_FILTER (0) | 2025.02.18 |
---|---|
NestJS) circular-dependency, forwardRef, undefined (0) | 2025.02.17 |
Powershell) Server ping check with timestamp (0) | 2025.01.15 |
mfc140ud.dll, afxwin1.inl Assertion 에러 (0) | 2025.01.06 |
node.js <-> MySQL <-> AWS RDS Deadlock (0) | 2025.01.02 |