오늘은 어제(문제은행 DB 설계 분투기 8) 만들어봤던 로그인 API를 기반으로 다른 기능의 API도 만들 예정입니다.

문제는 이곳에서 시작되었습니다.
주소창에 /login?어쩌구저쩌구 url로 들어가게되면
/:vodCd 패턴으로 먼저 인식하면서
vodDetail 함수를 호출하게 되는 것이죠
해결 완료!
추가적인 의문
-> 코드 선언 순서가 중요합니다.

이런 순서의 경우 login 패턴으로 먼저 인식해서 login함수로 연결해주고

이런 순서의 경우 :vodCd 패턴으로 먼저 인식해서 vodDetail함수로 연결해줍니다.
req.param 이 또한 엔드포인트에 포함되고 주소에 변수를 담는다.
api/:vodCd 라는 라우팅 패턴이 있다고 했을 때
vodCd에 변수를 담아서 가져오는 방식이 param방식
req.query 엔드포인트 주소의 ? 뒤에 등장하며 변수를 담음
api/login 이라는 라우팅 패턴이 있다고 했을 때
/login 엔드포인트 뒤에 ?를 달고 넘겨줄 변수를 key=value 형태로 제공한다.
두 개는 각각 언제 사용할까요?
path 파라미터는 특정 리소스를 정의할 필요가 있을 때, query 파라미터는 정렬 혹은 필터링이 필요할 때 사용한다.

이렇게 params로만 받게끔 되어있다면 query문은 무시되는 것 같습니다.

사진의 url 코드를 넣었음에도

이런 결과가 나옵니다.
params 라우팅 방식의 특징을 검색해봤지만 따로 나오는 건 없네요.
단지 하나의 데이터를 받는데 적합하다고 합니다.
그럼 왜 favicon이 나오는지도 알아보겠습니다
이건 나중에 - https://ryusm.tistory.com/9


실제로 그러하네요?
와우 이것때문에 40분은 날려먹은 것 같은데
왜 자바스크립트에서 대문자 NULL은 안 되는 건가요?
null로만 정의해놨다. Null, NULL은 정의되지 않은 변수로 인식 - 출처

이것도...!
TypeError: lastCode.substring is not a function
TypeError: lastCode.substr is not a function
TypeError: lastCode.match is not a function
왜 그런가 검색해봤더니
해당 함수를 사용하는 변수의 타입이 string이 아니어서 그렇다고 합니다. - 출처
분명 확인한 것 같은데 아니었습니다.
그 이유는 사용하는 commonDao함수에서 리턴하는 값이 string이 아닌 object였기 때문이죠. 리턴값이 변수 이름을 카멜케이스로 바꾼 뒤 object에 담은 값이기 때문에 이러한 오류가 발생했었습니다.
String type의 문자열이면 무조건 가능하다
사용이 안 된다면 그렇다면 그 변수는 String type이 아닌 것
let lastCode = await getQustnInfoLastCode(); // QQYYMM123456 코드 받기
let textPartInLastCode = String(lastCode).substring(0,6); // QQYYMM123456의 문자부분 QQYYMM
let numPartInLastCode = String(lastCode).substring(6,12); // QQYYMM123456의 숫자부분 123456
let nextNum = Number(numPartInLastCode) + 1; // 코드 +1해주기 // ex) 10 + 1 = 11
let nextNumPod0 = String(nextNum).padStart(6, '0'); // ex) 0000011
이렇게 진행되면 완료!
const curr = new Date();
const utc = curr.getTime() + (curr.getTimezoneOffset() 60 1000);
const KR_TIME_DIFF = 9 60 60 * 1000;
const kr_curr = new Date(utc + KR_TIME_DIFF));
코드로 한국 표준시 출력
(제 컴퓨터는 UTC로 되어있나봅니다.)
출처 - https://hianna.tistory.com/451
YYMMDD형식 출력
function () {
var yyyy = this.getFullYear().toString();
var MM = pad(this.getMonth() + 1,2);
var dd = pad(this.getDate(), 2);
var hh = pad(this.getHours(), 2);
var mm = pad(this.getMinutes(), 2)
var ss = pad(this.getSeconds(), 2)
return yyyy + MM + dd+ hh + mm + ss;
};


이러합니다.
한 글자 차이거든요 근데 이런 실수가 코딩 시간을 가르더랍니다.



이 오류들 모두 마이바티스 xml 파일 안에서 그레이브( ` )를 썼기 때문(~물결표가 존재하는 그 자판)
이 그레이브를 없애주면 정상적으로 동작한다.