2013-10-24 7 views
1

내가 에서 데이터베이스 연결을 종료하고 난이 오류 node.js에서 데이터베이스 연결을 종료하는 방법은 무엇입니까?

Cannot enqueue Query after invoking quit

을 얻고있다를 Node.js를.

가 여기 내 코드 일반적으로

socket.on('adminConnect', function (email) { 
    connection = mysql.createConnection(db_config); // db_config has all details of database 
    connection.connect(); // no problem in connection 
    connection.query("SELECT id FROM user WHERE email = '" + email + "' ", function (err, results, fields) { 
     if (err) throw err; 
     if (results[0]) { 
      // Some code 
      connection.end(); // its giving error "Cannot enqueue Query after invoking quit." 
     } else { 
      console.log("no id"); 
     } 
    }); 
}); 
+5

, 당신은 모든 reques에 대한 새 연결을 만들 싶지 않아 티. 더 많은 추가 쿼리를 위해 연결을 유지하십시오. – Zeta

+0

좋아, 내가 할거야. 하지만 내 문제는 연결을 끝내는 것입니다. – Vardan

+2

@ 사용자 요점은 그렇지 않습니다. 왜 재사용 할 수있는 연결을 닫으시겠습니까? 연결은 싸다. 그러나 그들을 여는 것은 왕복 또는 3를진다. –

답변

1

, 당신은 모든 시간을 닫는 대신 개방의 연결/다시 사용합니다.

을 : 모든 쿼리가 연결을 종료하기 전에 완료해야하기 때문에이 같은 안전 해요 그래서

connection.end(); 

는, 콜백 외부 라인을 넣어보십시오 :

귀하의 질문에 대답하기 위해,이 방법이다

connection.query(.......); 
connection.end(); 

코드는 다음과 같다 : 보통

socket.on('adminConnect', function (email) { 
    connection = mysql.createConnection(db_config); // db_config has all details of database 
    connection.connect(); // no problem in connection 
    connection.query("SELECT id FROM user WHERE email = '" + email + "' ", function (err, results, fields) { 
     if (err) throw err; 
     if (results[0]) { 
      // Some code 
     } else { 
      console.log("no id"); 
     } 
    }); 
    connection.end(); 
}); 
+0

더 이상 연결을 사용할 필요가없는 경우이 답변은 맞습니다. 재사용해야 할 필요는 없습니다. 감사합니다 randunel. – Vardan

+2

'connection.end'를 호출하기 전에'connection.query'가 완료되기를 기다리지 않아도됩니다. 그것은'connection.query' 콜백 내에서 호출되어야합니다. – robertklep

+2

@robertklep 틀린 가정을하기 전에 문서를 열람하는 시간을 가졌다면, 콜백이 시작되기 전에'.end()'를 호출 할 수 있다는 것을 알았을 것입니다. mysql 서버에 종료 패킷을 보내기 전에 나머지 모든 쿼리가 실행되는지 확인한다. "- node-mysql 문서에서 인용한다. 유사한 코드를 가진 문서에 예제가 있습니다. https://github.com/felixge/node-mysql#introduction. 연결 재사용에 관해서는, 내 대답에서 첫 번째 단락을 읽으십시오;) – randunel

관련 문제