我正在尝试使我的mysql池连接最大化,以便可以使用await
关键字。
const sql = require('mssql/msnodesqlv8');
const keys = require('../config/keys');
const util = require('util')
//Need this package for windows authentication
require('msnodesqlv8');
let config;
console.log(keys)
if (keys.db.state.toLowerCase() == "dev") {
config = {
user: keys.db.dev_user,
password: keys.db.dev_password,
server: keys.db.dev_server, // You can use 'localhost\\instance' to connect to named instance
database: keys.db.dev_database,
// driver:'msnodesqlv8',
pool: {
max: 10,
min: 5,
idleTimeoutMillis: 30000
},
options: {
encrypt: false,
instanceName: keys.db.dev_instanceName,
enableArithAbort: true
},
// port:57909,
enableArithAbort: false
}
}
console.log(config)
let pool = new sql.ConnectionPool(config).connect()
.then(query => {
return query
})
.catch(e => console.error("Database Trouble! ", e))
pool.query = util.promisify(pool.query)
module.exports = pool;
但是我得到了错误:
TypeError [ERR_INVALID_ARG_TYPE]:“原始”参数必须为 类型功能。收到未定义
我不明白在连接后返回查询时我们如何收到未定义的信息。
答案 0 :(得分:1)
pool 变量是一个待处理的Promise。因此,在解决承诺之前, pool.query 是未定义的。
由于 connect()方法返回了promise,因此您已经可以了。您需要解决连接承诺,然后 pool 将具有一个 query()方法,该方法也将返回一个承诺。
例如:
...
const pool = new sql.ConnectionPool(config);
(async function () {
await pool.connect();
const result = await pool.query('A QUERY HERE');
})()