TypeError [ERR_INVALID_ARG_TYPE]:“原始”参数必须是函数类型。收到未定义

时间:2020-07-25 20:05:14

标签: node.js sql-server

我正在尝试使我的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]:“原始”参数必须为 类型功能。收到未定义

我不明白在连接后返回查询时我们如何收到未定义的信息。

1 个答案:

答案 0 :(得分:1)

为什么util.promisify()方法失败?

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');
})()