보통 node 로 api 백엔드를 구성할때 env 파일을 설정 하고 db.config.js 로 db 설정 파일을 별도로 두고 관리한다. 개발서버에서는 잘 되다가 실서버로 이전 했는데 소스는 동일한데 response 에 데이터가 모두 이진법으로 buffer type 으로 넘어 올때가 있다. 숫자 데이터는 정상적으로 나오는데 영문이나 한글 등 string 형태의 데이터는 모두 이렇게 나와서 처음에는 무척 당황했다.
"mem_id": { "type": "Buffer", "data": [116, 101, 115, 116, 49, 49, 49] }
캐릭서셋이 안맞을 경우 이런 현상이 발생하는데 이때는 캐릭터셋을 수정해 볼수 있으면 그 방법이 가장 좋지만 이미 데이터가 모두 들어가 있는 상태에서 기존 db 데이터도 문제가 없어야 하고 신규 데이터 연동에 대해서도 문제가 없어야 하는 상황이라면 typeCast 를 설정해서 데이터를 읽어 올때 utf8 로 toString 으로 변환해 주는 방법이 있다. 숫자는 정상적으로 나오지만 string 데이터가 문제 이기 때문에 조건문에는 VAR_STRING 와 BLOB 데이터를 걸러 준다. 캐릭터셋도 맞는 형식으로 한번 더 정의를 해준다.
const connInfo = {
host: process.env.REACT_APP_DB_HOST,
port: process.env.REACT_APP_DB_PORT,
user: process.env.REACT_APP_DB_USER,
password: process.env.REACT_APP_DB_PASSWORD,
database: process.env.REACT_APP_DB_NAME,
// ... 기타 연결 정보
// typeCast 함수 추가
typeCast: function(field, next) {
// field 객체는 현재 처리 중인 필드의 메타데이터를 담고 있습니다.
// 예를 들어 field.type, field.length 등을 확인할 수 있습니다.
// next 함수는 기본 타입 변환 로직을 수행합니다.
// 예시: BLOB 또는 VARCHAR 타입이 Buffer로 넘어올 때 문자열로 변환
if (field.type === 'BLOB' || field.type === 'VAR_STRING') { // 또는 다른 문자열 관련 타입
if (field.length === 0) { // 빈 문자열 처리
return '';
}
// Buffer 타입인 경우 toString('utf8')로 변환
if (field.buffer()) {
return field.buffer().toString('utf8');
}
}
// 다른 타입의 경우 기본 변환 로직 사용
return next();
}
};
'JAVASCRIPT' 카테고리의 다른 글
평수 계산 스크립트 예시 (0) | 2024.11.28 |
---|---|
코딩 테스트 javascript 예시 (중급) (0) | 2024.11.27 |
html5 data 속성 사용하기 (0) | 2024.07.02 |
javascript 드래그로 첨부파일 구현 멀티 업로드 (0) | 2024.07.02 |
canvas로 낙서장 만들기 스크립트 지우개 기능 추가 반응형 적용 (0) | 2024.06.12 |