[Node.js] MSSQL 3.x Connection 중첩 해결 방법
2017. 6. 1. 00:32ㆍ개발/Node.js
반응형
MSSQL Module
Node에서 MSSQL Server와 연결하기 위해서는 npm의 mssql 모듈을 사용해서 연결을 할 수 있다.
이때 3.x 버전을 사용하고 있다면 연결 문제가 발생할 수 있다...
Node.JS가 비동기 방식으로 동작하면서 쿼리 요청을 처리하기 전에 쿼리 요청이 한번 더들어오게되면 connection이 2번 생겨나게 된다...
결국 첫번째 쿼리 또는 두번째 쿼리 둘중 하나만 쿼리 응답이 제대로 될 수가있고, 둘다 안될 수도 있고, 둘다 될수도 있다...
이런 경우 connection이 있다면 connection 시도를 막아줄 수 있도록 수정하면 해결할 수 있다. (100% 효율적인 방법은 아닙니다..)
조금 더 수월한 방안으로 나아 가려면 비동기 방식의 코드보다는 동기 방식의 코드를 사용하는 것이 더 좋다.
해결 방법
1. connection.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | var sql = require('mssql'); var for_query_connection; function ConnectMsSQL(callback) { var connection = new sql.Connection('mssql://유저명:비밀번호@DB서버IP:포트번호/DB이름', function(err) { if(err) { return callback(err); } callback(null, connection); }) } function runQuery(sqlquery, callback) { if(!for_query_connection) { ConnectMsSQL(function(err, conn) { if(err) { return callback(err); } for_query_connection = conn; runQuery(sqlquery,callback); }) return; } var request = new sql.Request(for_query_connection); request.query(sqlquery, callback); } exports.runQuery = runQuery; | cs |
--> runQuery 함수를 통해 쿼리가 실행되는데 이때 for_query_connection 변수에 connection 객체가 없다면 새로 연결을 시도하고 연결객체가 되어있는 상태라면 연결을 시도하지 않게 된다.
2. 사용하는 부분에서 다음과 같이 호출
1 2 3 4 5 | var connection = require('./connection'); connectionPool.runQuery('쿼리문', function(err, recordset) { // 콜백 함수 내용 }) | cs |
동기식으로 해결하려면 다음 링크를 참조하면 조금 도움 될거같다..
http://proinlab.com/archives/1811
https://github.com/nhnent/fe.javascript/wiki/October-12---October-16,-2015
반응형
'개발 > Node.js' 카테고리의 다른 글
[Node.js] Express Framework에서 textarea + DB 연동시 줄바꿈 해결방법 (0) | 2017.09.14 |
---|---|
[Node.js] Framework 비교 자료 (0) | 2017.09.13 |
[Node.JS] express router에서 module.exports 와 exports (0) | 2017.06.13 |
[Node.JS] Async Await 사용하기 (0) | 2017.06.08 |
[Node.JS] Node.JS Server에서 연산 시간 측정 (0) | 2017.06.08 |