노드js mysql 연결 유지에 대해서 또는 다시 연결에 대해서

조회수 5101회

노드js 와 mysql 을 연동하여 프로그램을 짜고 있는데요.

mysql에 원격지 서버다보니 잘 끊어지네요.

그래서... 접속해서 쿼리를 처리하고.. 끊고 필요할때 다시 접속연결해서 쿼리를 처리하고 끊고 하게 해봤는데

처음엔 되는데 두번째 연결에서는 에러를 발생시킵니다.

conn.connect() conn.query() conn.end()

이런 순으로 진행하면 연결하고 쿼리 던지고... 종료하고 그러지 않나요? 물론 비동기 방식이라서 callback 함수를 통해서.. 처리했는데도

두번째 연결 붙을때는 문제가 발생합니다. 이런 경우는 어떻게 처리하면 될까요?

======= 제가 짠 소스 입니다 =============================

var mysql = require('mysql');
var dbconfig = require('../js/database.js');
var connection = mysql.createConnection(dbconfig); //< DB Connection~!!
var sleep = require('system-sleep');


connection.connect(function(err){
    if(!err) {
        console.log("Database is connected ... nn");  
    } else {
        console.log("Error connecting database ... nn:" + err);    
    }


    var sql = "SELECT day_reset_time, night_reset_time FROM reset_table WHERE week_day='목요일'";

    connection.query(sql, function(err, rows){

        if(err) throw err;
        day_reset_time   = rows[0].day_reset_time;
        night_reset_time = rows[0].night_reset_time;  
        console.log('day_reset_time:' + day_reset_time + ', night_reset_time:' + night_reset_time);
        connection.end();     

    });    

});

 sleep(10000); //< 이 곳에서 10초 멈추고~!!

connection.connect(function(err){ 
    if(!err) {
        console.log("Database is connected ... nn");  
    } else {
        console.log("Error connecting database ... nn:" + err);    
    }

    var sql = "SELECT day_reset_time, night_reset_time FROM reset_table WHERE week_day='목요일'";

    connection.query(sql, function(err, rows){

        if(err) throw err;   //< Cannot enqueue Query after invoking quit.
        day_reset_time   = rows[0].day_reset_time;
        night_reset_time = rows[0].night_reset_time;  
        console.log('day_reset_time:' + day_reset_time + ', night_reset_time:' + night_reset_time);
        connection.end();     

    });    

});

처리 결과

C:\nodeProj\voo\js>node test.js
Database is connected ... nn
day_reset_time:06:55, night_reset_time:16:05
Error connecting database ... nn:Error: Cannot enqueue Handshake after invoking quit.
C:\nodeProj\valeo\js\test.js:43
        if(err) throw err;
                ^

Error: Cannot enqueue Query after invoking quit.
    at Protocol._validateEnqueue (C:\nodeProj\valeo\node_modules\mysql\lib\protocol\Protocol.js:204:16)
    at Protocol._enqueue (C:\nodeProj\valeo\node_modules\mysql\lib\protocol\Protocol.js:139:13)
    at Connection.query (C:\nodeProj\valeo\node_modules\mysql\lib\Connection.js:208:25)
    at Handshake._callback (C:\nodeProj\valeo\js\test.js:41:16)
    at Handshake.Sequence.end (C:\nodeProj\valeo\node_modules\mysql\lib\protocol\sequences\Sequence.js:88:24)
    at C:\nodeProj\valeo\node_modules\mysql\lib\protocol\Protocol.js:225:14
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)
    at Function.Module.runMain (module.js:667:11)
    at startup (bootstrap_node.js:187:16)
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 자답:

    sleep 다음 행에..

    connection = mysql.createConnection(dbconfig);

    넣으면 해결 되네요 ㅎㅎ...

    해결되어 기쁩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)