如何在带有Typescript的节点中使用mysql

时间:2019-06-04 11:47:44

标签: mysql node.js typescript

背景

我正在制作一个带有节点和打字稿的简单网站。 我安装了MySQL module与数据库进行通信。

问题

我正在尝试从数据库获取数据,但是我不知道如何确定结果应具有的类型。例如,

const sql = `SELECT metaValue FROM ${this.table} WHERE metaKey = '${key}'`;
const result = await this.pool.query(sql);
console.log(result);

在这种情况下,结果为[ RowDataPacket { metaValue: 'map-79.jpg' } ]。如何从结果中得到map-79.jpg?结果应该是哪种类型?

3 个答案:

答案 0 :(得分:2)

它将返回对象数组:

const sql = `SELECT metaValue FROM ${this.table} WHERE metaKey = '${key}'`;
const result = await this.pool.query(sql);
console.log(result);
result.forEach(row => {
    console.log(row.metaValue)
})

或者您可以使用map

创建数组
let imgArray = result.map(row => { return row.metaValue });
console.log(imgArray);

答案 1 :(得分:0)

@Pushpendra Kumar 是正确的。但是我们需要类型保护,然后再将结果用作数组,如下所示。

const sql = `SELECT metaValue FROM ${this.table} WHERE metaKey = '${key}'`;
let rows = await this.pool.query(sql);
if ( Array.isArray(rows) ) {
  return rows[0].metaValue
}

答案 2 :(得分:0)

我使用let records: youDefinedInterface[] = [].slice.call(result, 0);将查询类型转换为普通数组。