2024.01.16(화)
AS
(별칭)을 사용하여 query에서 camelCase로 지정해주기*
을 사용할 수 없어 각 필드를 일일이 지정해주어야 한다.*
을 사용하여 모든 필드를 선택할 수 있다.나는 2번 방식의 경우 모든 property에 대해 순회해야 하므로 시간 복잡도가 이 돼서 data 개수가 많아질수록 성능 이슈가 있을 수 있다고 생각했다. 물론 지금은 데이터가 그렇게 많지도 않으니 두 방식을 적당히 섞어 써보자.
utils에 responseFormatter.js
모듈을 만들어 다음과 같이 format을 변환해주는 함수를 작성해 보았다.
/**
* @example
* const testObject = {
* 'snake_case': 1,
* 'hello': 2,
* 'camelCase': {
* 'hi_world': 3,
* 'this_is_test': [
* { 'nested': 4, 'g_idle': 5 },
* { 'nested': 6, 'g_idle': 7 }
* ]
* }
* };
*
* const camelCaseObject = convertSnakeToCamel(testObject);
* console.log(JSON.stringify(camelCaseObject, null, 4));
*/
const convertSnakeToCamel = (obj) => {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (Array.isArray(obj)) {
return obj.map(convertSnakeToCamel);
}
return Object.keys(obj).reduce((acc, key) => {
const camelKey = key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
acc[camelKey] = convertSnakeToCamel(obj[key]);
return acc;
}, {});
}
module.exports = convertSnakeToCamel;
query에서도 column 하나만 바꿔주면 되는 경우도 있고, 아니면 많은 column들을 모두 바꿔야하는 경우와 같이 다양해서 정말 한 두개의 column만 바꿔주면 되는 것은 1번 방식으로 별칭으로 지정해줬고, 그 외에 *
로 많은 수의 snake_case 형태의 column들을 가져오는 경우에는 내가 만든 convertSnakeToCamel
함수를 이용해 변환했다!
솔직히 그냥 모든 변수명 형식을 하나로 통일하고 싶은데 DB table의 column명은 snake_case로 javascript는 모든 변수명을 camelCase로 쓰는 관습이 있다보니 변환을 해주어야 하는 부분 조금 불편하다.🤨 그래도 연습삼아 하니 이마저도 재미있다.😋