728x90

MSSQL POOL을 Express 환경에서 사용하기

node-mssql의 예제를 참고로 다음과 같이 사용하고 있었습니다.

const sql = require('mssql')

// async/await style:
const pool1 = new sql.ConnectionPool(config);
const pool1Connect = pool1.connect();

pool1.on('error', err => {
    // ... error handler
})

async function messageHandler() {
    await pool1Connect; // ensures that the pool has been created
    try {
        const request = pool1.request(); // or: new sql.Request(pool1)
        const result = await request.query('select 1 as number')
        console.dir(result)
        return result;
    } catch (err) {
        console.error('SQL error', err);
    }
}

문제는 간간히 - Error: Already connecting to database 와 같은 오류가 발생했습니다.

이유로 매번 요청시마다, connect를 연결하려고 하였기 때문이었습니다.

해결 방법으로는 How can I use a single mssql connection pool across several routes in an Express 4 web application?에서 제공하는 db.js를 만들어서 사용하면 됩니다.

const sql = require("mssql");
const config = {
  user: process.env.DB_MSSQL_USER,
  password: process.env.DB_MSSQL_PASSWORD,
  server: process.env.DB_MSSQL_IP, // You can use 'localhost\\instance' to connect to named instance
  database: process.env.DB_MSSQL_DB,
  options: {
    encrypt: true, // Use this if you're on Windows Azure
  },
  pool: {
    max: 5,
    min: 1,
    idleTimeoutMillis: 30000,
  },
};

const poolPromise = new sql.ConnectionPool(config)
  .connect()
  .then((pool) => {
    console.log("Connected to MSSQL");
    return pool;
  })
  .catch((err) => console.log("Database Connection Failed! Bad Config: ", err));

module.exports = {
  sql,
  poolPromise,
};

오늘의 삽질도 끝~

참고자료

Posted by lahuman

댓글을 달아 주세요