node mssql 连接池连接数据库问题
发布于 5 年前 作者 SKandAV 3776 次浏览 来自 问答

小弟目前使用mssql连接池在项目使用。但是遇到了一些问题,希望老哥们解答一下。下面是数据库连接代码 config.js *** let app = { user: ‘sa’, password: ‘Znw2015?’, server: ‘10.168.1.203’, database: ‘Electricelves’, port: 1433, pool: { min: 0, max: 100, idleTimeoutMillis: 3000 } };

module.exports = app;

//** const mssql = require(‘mssql’); const config = require("./config.js");

const pool = new mssql.ConnectionPool(config)

pool.connect(err => { if (err) { console.log(err) return } }) function query(sql, callback) { try { let ps = new mssql.PreparedStatement(pool); ps.prepare(sql, err => { if (err) { console.log(err); return; } ps.execute(’’, (err, result) => { if (err) { console.log(err); return; } ps.unprepare(err => { if (err) { console.log(err); callback(err, null); return; } callback(err, result); }); }); }); } catch (error) { console.log(‘SQL error’,error) } } //我的程序在启动时就会进行数据库查询,这时就会报一个错 ConnectionError: Connection not yet open.如果加个setTimeOut就没问题,这个应该是连接异步问题。代码修改后我把sql查询代码放到connect连接的回调里面 function query(sql, callback) { pool.connect(err => { if (err) { console.log(err) return } else { try { let ps = new mssql.PreparedStatement(pool); ps.prepare(sql, err => { if (err) { console.log(err); return; } ps.execute(’’, (err, result) => { if (err) { console.log(err); return; } ps.unprepare(err => { if (err) { console.log(err); callback(err, null); return; } pool.close() callback(err, result); }); }); }); } catch (error) { console.log(‘SQL error’,error) } } })

}

这样不会报 Connection not yet open。但当一个操作频繁的进行操作数据库时会报 ConnectionError: Database is already connected! Call close before connecting to different database或者ConnectionError: Already connecting to database! Call close before connecting to different database问题。希望老哥们帮帮忙,解答一下问题。还有关于连接池的关闭问题,这里的关闭是指执行完sql后取消这次连接,使连接重新回到连接池的意思吗?还有mssql模块是否能支持比较高频率的数据库操作呢

回到顶部