-
Joi 17.8.1 업데이트로 인한 .email() 메서드 에러시행착오 2023. 2. 21. 17:02
Joi란
- request 유효성을 확인하기 위한 유효성 검사 라이브러리
Joi 17.8.1 버전
- 17.8.1 버전으로 업데이트 되면서 package.json에 @hapi/address 모듈이 추가됐다.
- email() 메서드가 구조가 변경 됐다.
email: Joi.string().email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } })
에러 원인
- 팀에서 사용하고 있는 Joi 버전은 17.4.1버전으로 구버전이었다.
- email() 메서드를 사용할 때 다음과 같이 사용하고 있었다.
email: Joi.string().email({ tlds: { allow: false } }),
해결 방법
yml파일을 통해 Azure App Service에 배포할 때 script로 npm install 명령어를 실행 했었다.
따라서 운영 서버에 배포 될 때 마다 최신 모듈로 설치 되었다. 따라서 기존에 사용하던 방식으로 email 유효성을 검사하게 되는 경우 파라미터가 undefined로 되기 때문에 @hapi/address/dist/domain.js에 있는 다음 부분에서 해당 에러가 발생한다.TypeError: Cannot read properties of undefined (reading 'has')
const tlds = options.tlds; if (tlds) { const tld = segments[segments.length - 1].toLowerCase(); if (isTldsAllow(tlds)) { if (!tlds.allow.has(tld)) { return (0, errors_1.errorCode)('DOMAIN_FORBIDDEN_TLDS'); } } else if (tlds.deny.has(tld)) { return (0, errors_1.errorCode)('DOMAIN_FORBIDDEN_TLDS'); } }
email() 메서드를 사용하는 대신 string().require()로 유효성을 검사하여 문제를 해결하였다.
단순 string() 메서드로 email 형식을 validate할 수 없으니 추후 변경된 email() 메서드를 사용하여 유효성을 검사할 예정이다.
또한 yml파일에 작성한 script 부분에서 npm install로 최신 버전을 설치하는 대신에 로컬 환경과 동일한 버전으로 모듈들을 설치하는 방법을 찾아 수정하여 버전 이슈로 인한 문제를 예방하겠다.참고자료
'시행착오' 카테고리의 다른 글
Javacript Heap Out Of Memory error 해결 (0) 2022.08.30 MongoDB : Argument "docs" must be an array of documents (0) 2022.08.29 ERROR : 'node_env'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다 (0) 2022.04.07 Bitbucket - 구글로 로그인 시 App Password 생성 (0) 2021.12.05