Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript mysql2返回值混淆_Javascript_Mysql_Node.js_Arrays_Object - Fatal编程技术网

Javascript mysql2返回值混淆

Javascript mysql2返回值混淆,javascript,mysql,node.js,arrays,object,Javascript,Mysql,Node.js,Arrays,Object,我还是mysql和后端的新手,所以如果这是一个愚蠢的问题,我很抱歉 我正在使用node/mysql2访问mysql数据库。连接使用Promisified连接池方法。当我尝试此代码时: const result = await db.query( ` SELECT id FROM User WHERE name = ? `

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

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

    const result = await db.query(
        `
        SELECT
            id
        FROM
            User
        WHERE
            name = ?
        
        `,
        [name]
    );
    return result[0];
返回值是这个数组
[[TextRow{id:53}],[ColumnDefinition{u buf:,_clientencode:'utf8',_catalogLength:3,_catalogStart:10,_schemaLength:6,_schemaStart:14,_tableLength:4,_orgTableLength:21,_orgTableStart:4,_orgTableStart:26,_orgNameLength:2,_orgNameStart:34,字符集:63,编码:'binary',name:'id',columnLength:11,columnType:3,flags:16907,decimals:0}]

终端上的结果:

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


编辑:添加了一个结果截图,以便更好地阅读

,因为mysql2与mysql有很大不同,因为它返回了一个承诺,如下文档:

所以我像这样编辑了你的代码,希望它对你有用:

const [rows]= await db.query(
    `
    SELECT
        id
    FROM
        User
    WHERE
        name = ?
    
    `,
    [name]
);
return rows.map((row) => { return row.id  };

JavaScript中的第一个数组是对象

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

JavaScript中有两种数据结构

  • 基本数据类型=未定义、布尔、数字、字符串等
  • 结构类型=对象、数组、集合等
  • 见:

    如果你想检查某个东西是否是数组,你必须使用
    insaceof
    或检查构造函数,但这是另一个答案的材料。基本上,如果你在数组上做typeof,你会得到object。不要让这让你感到困惑

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

  • 第一个数组包含实际数据
  • 第二个数组包含列定义
  • 文本
    TextRow
    ColumnDefinition
    只是一个描述性文本,可以注销来描述对象。您不能对文本本身做任何事情,只能对对象做任何事情

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

    const rows = result[0]
    const defs = result[1]
    
    然后可以在行中循环(如果需要)


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

    非常感谢!这对我帮助很大!
    rows.forEach(item => {
     console.log('id', item.id)
    })