【问题标题】:Cannot use bindNodeCallback with node-mysql connection.query无法将 bindNodeCallback 与 node-mysql connection.query 一起使用
【发布时间】:2021-04-18 20:19:42
【问题描述】:

我正在尝试使用 bindNodeCallbackconnection.query 转换为返回 observable 的函数。

const mysql = require('mysql2');
const { bindNodeCallback } = require("rxjs");
const connection = mysql.createConnection({host:"servername", user: "u", password:"p", database:"mydb" });

connection.connect();
let q = 'SELECT 1 from dual';
//1.This works. Default api
connection.query(q, (err, v)=>console.log(v));

//2.this throws: TypeError: Cannot read property 'config' of undefined
//bindNodeCallback(connection.query)(q).subscribe(v=>console.log(v));

//3.This returns a two dimensional array where the first element contains an array with the results and the second an array of ColumnDefinition.
bindNodeCallback(connection.query).call(connection, q).subscribe(v=>console.log(v));


声明 1 打印: [ TextRow { '1': 1 } ]

Statement 2 throws: TypeError: Cannot read property 'config' of undefined 并且在调试代码后我看到它引用了 this.config (在 Connection 对象中),根据 the doc 在调用输出函数时需要提供.

所以我在语句 3 中添加了 this,但由于某种原因,我没有得到预期的结果:

声明 3 打印: [[ TextRow { '1': 1 } ],[ColumnDefinition { _buf:..., _clientEncoding: 'utf-8'....]]

我的问题是,我应该如何使用bindNodeCallback() 来打印语句 1 打印的结果?

注意:如果您想使用旧版本的 mysql 测试此问题,您可以使用 mysql 而不是 mysql2,其中相同的问题发生在不同类型 TextRow=>RowDataPacketColumnDefinition=>FieldPacket

【问题讨论】:

    标签: node.js rxjs node-mysql node-mysql2


    【解决方案1】:

    bindNodeCallback 将创建一个函数,该函数返回一个 observable,订阅将流式传输一个且唯一包含以下内容的值:

    • 传递给回调的参数(如果有)
    • array 的参数传递给回调(如果多个)。

    mysqlmysql2将两个参数传递给query()的回调:一个是包含结果的数组,另一个是包含列定义的数组。

    要验证调用connection.query(q, (err, v, colDef)=>console.log(v, colDef)); 以查看它是否还会打印列定义。

    所以由于参数是两个,传递给 subscribe 的函数应该接收一个数组,而不是单个参数。

    “我应该如何使用bindNodeCallback()来打印语句1打印的结果?”

    像现在一样调用它,只需从map 传递,仅获取第一个参数(回调参数数组索引 0 处的参数):

    bindNodeCallback(connection.query).call(connection,q)
    .pipe(map(arr=>arr[0])).subscribe(v=>console.log(v));
    

    【讨论】:

      猜你喜欢
      • 2017-10-19
      • 2014-02-13
      • 2011-08-18
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 2015-07-28
      相关资源
      最近更新 更多