반응형

안녕하세요 OB입니다.

최근에 nodejs를 이용해서 웹 서버를 구축하는 작업을 해보고 있습니다.

nodejs는 강의로 조금.. 접해본 수준이어서 작업이 수월하지는 않네요ㅎㅎ

웹 서버를 구축하기 위해 DB와 연동하는 과정에서 많은 오류가 발생했는데

그중 가장 저를 🐶고생시킨 'TypeError: ~ is not a function' 에러를 확인해보겠습니다!

 


 

 

간단하게 오류문을 해석해보면 pool.query 함수가 함수로서 제대로 동작을 하지 않고 있는 것을 알 수 있습니다.

아무래도 nodejs를 많이 다뤄보지 않아서 여러 자료를 찾아보고 코드를 작성했는데

남들은 되는 코드가 저는 동작하지 않는 점이 굉장히 의문이 많이 들더라구요..

 

그래서 함수가 제대로 동작하지 않는 이유를 생각해보았습니다.

저는 두 가지의 경우를 떠올릴 수 있었는데

 

  1. 함수명이 겹치는 경우(이미 선언된 변수와 겹친 경우)

  2. 함수가 정의가 되지 않은 경우

 

이렇게 두 가지였습니다.

뭔가 이렇다 할만한 오류도 아닌거같은데 해결은 안되니 엄청 답답하더라구여.

pool.query를 함수로 만들려고 (); 붙이니 연결된 코드가 함수가 아니라고 하곸ㅋㅋㅋㅋㅋㅋ

 

1. 함수명이 겹치는 경우

저는 1번에 해당하는 오류로 function 에러가 발생했더라구여.

위의 사진에서 pool이라는 변수를 이용해 함수를 만들었는데 다른 코드에서 pool을 이미 사용하고 있어서

중복이 발생했다는..ㅎㅎ

굉장히 간단한 문제인데 이걸 일주일을 잡고 오류해결하고있었으니 이렇게 허무할수가 없더라구여

진짜 다 완성한 코드인데 이걸!! 이걸 일주일을!!!!@@@!!!!!!!!!!!!!!!!!

변수명을 안겹치게 다시 작성해준다면 문제없이 코드가 동작할 것입니다.

실제로 저도 pool에서 con이라는 변수로 변경하니까 오류없이 동작했습니다!!

 

2. 함수가 정의가 되지 않은 경우

함수를 사용하기 위해서는 먼저 정의를 해야하죠.

function이라는 명령어를 이용해 함수를 정의하고 그것을 이용하면 되는데

간단하게 코드로 살펴보면 이런식으로 구성할 수 있습니다!

ah라는 js파일을 만들어서 함수 sum을 정의하고 sum함수에 data1, data2에 각각 1을 넣어 console에 찍는 코드입니다.

코드를 실행해보면 이런식으로 2라는 값이 리턴되는 것을 확인할 수 있습니다.

 

그런데 만약,, console.log(sum(1,1));과 함수를 정의한 위치를 변경하면 값이 어떻게 나올까요?

이런식으로 코드를 변경하면.. 놀랍게도 콘솔에서 2라는 값이 출력되는 것을 확인할 수 있습니다!!

 

그렇기에 함수를 정의한 위치가 조금 달라진다고 하여 크게 오류날일은 없을 것이라고 생각하고

함수를 정의하지 않고 사용하는 경우는 거의 없으니까..?

혹시 정의가 되지 않았다면 아마 'ReferenceError: ~ is not defined' 에러가 발생할 것입니다.

이런 경우라면 함수 정의를 추가해주시면 됩니다.

 

1, 2번의 방법 모두 코드를 잘 확인해야한다는것이 개빡치네요

오류가 발생한다면 변수명은 정말 꼭 한번 다시 확인해보세요.

코드를 쓰다보면 비슷한 변수가 굉장히 많이 생겨서 헷갈리게 되는데

이부분에서 저도 오류 잡는데 한참 걸렸네요ㅜㅜ

반응형

+ Recent posts