javascript - mysql2返回值困惑

标签 javascript mysql node.js arrays object

我对 mysql 和后端整体还是新手,所以如果这是一个愚蠢的问题,我很抱歉。

我正在使用 node/mysql2 访问 mysql 数据库。 Promisified连接池方法用于连接。当我尝试这段代码时:

    const result = await db.query(
        `
        SELECT
            id
        FROM
            User
        WHERE
            name = ?
        
        `,
        [name]
    );
    return result[0];

返回值就是这个数组 [ [ TextRow { id: 53 } ], [ ColumnDefinition { _buf: <Buffer 01 00 00 01 01 28 00 00 02 03 64 65 66 06 64 65 76 69 6c 7a 04 55 73 65 72 04 55 73 65 72 02 69 64 02 69 64 0c 3f 00 0b 00 00 00 03 0b 42 00 00 00 05 ... 24 more bytes>, _clientEncoding: 'utf8', _catalogLength: 3, _catalogStart: 10, _schemaLength: 6, _schemaStart: 14, _tableLength: 4, _tableStart: 21, _orgTableLength: 4, _orgTableStart: 26, _orgNameLength: 2, _orgNameStart: 34, characterSet: 63, encoding: 'binary', name: 'id', columnLength: 11, columnType: 3, flags: 16907, decimals: 0 } ] ]

终端结果:enter image description here

但实际上它是一个对象。因为console.log('result is ', typeof result)给我看一个对象。 这是让我困惑的第一件事。为什么console.log显示的是对象类型,返回值却是数组? 另一件事是,当我尝试访问 TextRow 时,我根本做不到。 TextRow 在这里做什么?这也让我很困惑。如果有人能帮助我澄清这一点,我将不胜感激

编辑:添加了结果的屏幕截图以便更好地阅读

最佳答案

首先。 JavaScript 中的数组是对象。

如果你愿意做 console.log(typeof []) 你也会反对。

JavaScript 中有两种数据结构

  1. 原始数据类型 = 未定义、 bool 值、数字、字符串等
  2. 结构类型 = Object、Array、Set 等。

参见: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures

如果您想检查某物是否为数组,您必须使用 insanceof 或检查构造函数,但这是另一个答案的 Material 。基本上如果你在数组上做 typeof 你会得到对象。不要让你感到困惑。

所以结果实际上是一个数组。通过查看它,我们看到它包含两个数组

  1. 第一个数组包含实际数据
  2. 第二个数组包含列定义

文本 TextRowColumnDefinition 只是一个描述性文本,被注销以描述对象。您不能对文本本身执行任何操作,只能对对象执行任何操作。

所以.....如果您只需要包含数据的行,那么您只需获取结果数组中的第一个元素,如果您需要定义,则获取数组中的第二个元素

const rows = result[0]
const defs = result[1]

然后您可以循环遍历行(如果需要)

rows.forEach(item => {
 console.log('id', item.id)
})

这就是为什么您的代码有 result[0] - 因为它只返回行。

关于javascript - mysql2返回值困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63839537/

相关文章:

node.js - 如何将 i18n 模块与 hapi.js 一起使用?

c# - Json.Net 解析不同格式的json

Javascript 文件上传 - PDF 到图像

javascript - JQuery Autocomplete 在 Chrome 中工作,但在 android 中不工作,使用 phonegap

python - 如何导入虚拟环境中未安装的python-mysql包?

MySQL 外键错误 1452

javascript - Javascript所有音频淡出

javascript - 在 promise 链中容纳 Q.all

c# - 两个表,两个表中的唯一 ID?

node.js - 在 Apache 后面运行 express 应用程序时如何强制使用 SSL?