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,
};