NodeJS TypeError: pgsql.one is not a function [PJT공유용]

공유하기 전에 버그가 존재한 상태에서 Commit과 push를 해서 다음과 같이 버그에 대한 설명을 첨부한다.

2023-11-09에 Github에 공유한 js 파일 중 signup.js 코드를 보면 pgsql.one이 있는 라인이 있다.

Postgresql의 쿼리를 실행하는 함수인데 해당 함수를 불러올 수 없어서이다.

에러문을 보면 pgsql.one is not a funtion 이라고 되어있는데 pg-promise Document에서 제공하는 예시와 같이 사용하였기 때문에 문법상 오류는 아닐 것이다.

따라서 pgsql이라는 변수를 선언한 곳으로 이동해보자.

상단에 pgsql을 선언하였는데 config 디렉터리의 pgsql.js 파일을 참조하여 pgsql을 변수로 선언하고 있다.

config 디렉터리의 pgsql.js에서는 pgsql을 pg_promise함수를 사용해 db에 연결한 객체를 exports 하고 있다.

exports된 pgsql은 오른쪽 pg_promise(connectionData)를 실행하고 반환되는 결과를 반환해주는 것이다.

다시 signup.js로 돌아와 pgsql = require(‘../../config/pgsql 코드를 보면 config/pgsql.js 파일에서 exports하고 있는 변수 중 pgsql 변수를 가져와 선언하고 싶을때는 반드시 {} 사이에 변수를 선언해줘야한다.

const {pgsql} = require('../../config/pgsql');

{} 내부에 선언하지 않으면 config/pgsql.js 파일의 전체를 Object로 받아버리기 때문에 exports되는 pgsql을 접근할 수 없는 전혀 다른 변수로 생성되버리기 때문에 에러가 발생하는 것이다.

따라서 다른 파일에서 exports된 변수나 함수를 사용할 때에는 {} 내부에 선언해 사용해 주도록 하자.

Leave a Comment