Javascript mysql2返回值混淆
我还是mysql和后端的新手,所以如果这是一个愚蠢的问题,我很抱歉 我正在使用node/mysql2访问mysql数据库。连接使用Promisified连接池方法。当我尝试此代码时: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 = ? `
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)
})