MySQL 연동하는 과제를 진행하면서 GET/POST 시에 계속 에러가 발생했다.
DB 연결은 되었지만 요청을 하면 매번 아래와 같은 타입 에러가 발생했다.
TypeError: db.query is not a function.
//도대체 왜!!
쿼리 스트링에는 오류가 없었기 때문에 에러 로그로는 원인을 알 수 없었다.
아직 디버깅이 서툴기 때문에 에러 로그로 확인이 안 될 때가 가장 답답한데, 시간을 많이 허비하고 나서야 원인이 DB 연결 쪽의 이슈라는 것을 발견했다.
원인은 DB connection의 중복.
node-mysql 모듈을 사용하는 경우 mysql.createConnection()을 하고 나면 아래에 connection.connect()로 다시 연결할 필요가 없다고 한다. 불필요한 코드이고 이것이 오류를 발생시키기도 한다고 함. 그래서 기존의 아래 코드에서,
const mysql = require("mysql");
const password = process.env.DATABASE_SPRINT_PASSWORD;
const host = "localhost";
const connection = mysql.createConnection({
host: host,
user: "root",
password: password,
database: "chat"
});
connection.connect(err => {
if (err) {
console.log(err);
}
console.log("Connected to the MySQL server!!"); //콘솔에 커넥티드 메시지가 찍혔지만 오류가 발생
});
connection.end();
connection.connect()와 connection.end() 부분을 주석 처리해 주고 module.exports 해 주었다.
const mysql = require("mysql");
const password = process.env.DATABASE_SPRINT_PASSWORD;
const host = "localhost";
const connection = mysql.createConnection({
host: host,
user: "root",
password: password,
database: "chat"
});
// connection.connect(err => {
// if (err) {
// console.log(err);
// }
// console.log("Connected to the MySQL server!!");
// });
// connection.end();
module.exports = connection; //윗 부분을 주석처리하고 exports 해주니 잘 작동했다.
이렇게 수정하고 나니 요청과 응답이 잘 작동했다.
문제를 해결하는 과정에서 커넥션 풀링 이란 개념도 알게 되었는데 아직은 명확하게 이해가 되지 않아서 다음 기회에 정리해보기로!
그런데 에러 로그. 자꾸 딴소리하는데 왜 정확한 원인을 말해주지 않는 거야.. ;ㅅ;
잠시 원망했지만 또 한 가지 배웠다.
'Coding > TIL (Today I Learned)' 카테고리의 다른 글
갑자기 발생한 react-native run-android 에러 (0) | 2020.07.03 |
---|---|
state 불변성 관리, immer 라이브러리 써보기. (0) | 2020.05.25 |
MySQL: SQL문 입력하다 ' 또는 `을 입력했을 때 (2) | 2020.04.02 |
JavaScript: Promise, async & await 이해 (0) | 2020.03.20 |
ES6: Destructuring (구조분해 할당) (0) | 2020.02.13 |