【问题标题】:TypeError [ERR_INVALID_ARG_TYPE]: The "original" argument must be of type function. Received undefinedTypeError [ERR_INVALID_ARG_TYPE]:“原始”参数必须是函数类型。收到未定义
【发布时间】:2020-07-29 01:00:00
【问题描述】:

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

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

【问题讨论】:

    标签: node.js sql-server


    【解决方案1】:

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

    pool 变量是一个未决的承诺。因此,在解决承诺之前,pool.query 是未定义的。

    如何使用等待?

    由于 connect() 方法返回一个承诺,你已经可以了。您需要解决连接承诺,然后 pool 将有一个 query() 方法,该方法也返回一个承诺。

    例如:

    ...
    
    const pool = new sql.ConnectionPool(config);
    (async function () {
        await pool.connect();
        const result = await pool.query('A QUERY HERE');
    })()
    

    【讨论】:

      猜你喜欢
      • 2019-10-01
      • 2020-09-16
      • 2020-10-31
      • 1970-01-01
      • 2021-07-17
      • 2020-08-29
      • 2022-01-12
      • 2019-01-24
      • 2021-09-08
      相关资源
      最近更新 更多