typescript 节点mysql2无法访问更新结果

ni65a41a  于 2023-03-24  发布在  TypeScript
关注(0)|答案(2)|浏览(132)

我用mysql2做了一个简单的更新:

UPDATE table1
    SET table1.value1 = ?, table1.value2 = ? 
    WHERE user_id = (
      SELECT user_id 
      FROM user
      WHERE company_id = ?
    )

table1通过user_id与user表相关,但我只有company_id,所以我做了一个子查询(可能应该是一个join,但这是另一个讨论):

const [results, buff] = await connection.execute(query, values);
return results

但是,当访问结果以确保没有错误并且只更新了一行时,results返回:

console.log
    ResultSetHeader {
      fieldCount: 0,
      affectedRows: 1,
      insertId: 0,
      info: 'Rows matched: 1  Changed: 0  Warnings: 0',
      serverStatus: 2,
      warningStatus: 0,
      changedRows: 0
    }

但是我不能访问这些值。如果我尝试results.affectedRows,我会得到

Property 'affectedRows' does not exist on type 'RowDataPacket[] | RowDataPacket[][] | OkPacket | OkPacket[]'.

唯一的方法就是执行results['affectedRows']。有什么建议吗?

xam8gpfp

xam8gpfp1#

所以我忘了说这是一个打字错误,我可以通过以下操作来修复它:

const [results, buff] = await connection.execute(query, values);
const json: any = results;
return json.affectedRows //or whatever property I want

这也适用于:

const [results, buff] = await connection.execute(query, values);
return json as any; //then in the calling fuction access the properties I want
hwamh0ep

hwamh0ep2#

我最近遇到了同样的问题,我找到的解决方案是将返回类型添加到connection.execute本身,从mysql2 const result = await pool.execute<OkPacket>(query, values);提供的类型中,我认为你不再需要它,但希望对其他人有用。干杯。

相关问题