节点 mysql2 无法访问更新结果
Posted
技术标签:
【中文标题】节点 mysql2 无法访问更新结果【英文标题】:node mysql2 can't access update results 【发布时间】:2020-09-21 03:45:26 【问题描述】:我正在使用mysql2 进行简单的更新:
UPDATE table1
SET table1.value1 = ?, table1.value2 = ?
WHERE user_id = (
SELECT user_id
FROM user
WHERE company_id = ?
)
table1 通过user_id
与用户表相关,但我只有company_id
,所以我做了一个子查询(可能应该是一个连接,但那是另一个讨论):
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
我会得到 p>
Property 'affectedRows' does not exist on type 'RowDataPacket[] | RowDataPacket[][] | OkPacket | OkPacket[]'.
使其工作的唯一方法是执行results['affectedRows']
。有什么建议?
【问题讨论】:
你看过thisGit问题线程吗? @PhaniMahesh 我正在遵循他们的异步/等待建议:npmjs.com/package/mysql2#using-promise-wrapper 获得错误的唯一方法是使用我正在使用的 try/catch。我应该仅仅依靠它来成功查询吗? 【参考方案1】:所以我忘了说这是一个打字稿错误,我可以通过以下方式修复它:
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
【讨论】:
我最后也为mysql2响应做了一个接口,所以我不必使用any
您能否更新您的答案以显示您使用的界面?我被困在 RowDataPacket 类型上
所以我在做const [results, buff] = await connection.execute(query, values); return results as IUpdateTokens
,接口是interface IUpdateTokens fieldCount?: number, affectedRows?: number, insertId?: number, info?: string, serverStatus?: number, warningStatus?: number, changedRows?: number,
好吧,很有趣。我仍然认为这会给我的 RowDataPacket 实现带来麻烦......但我很快就会看看以上是关于节点 mysql2 无法访问更新结果的主要内容,如果未能解决你的问题,请参考以下文章
更新到 Ubuntu 16.04 后 mysql2 gem 无法正常工作 - libmysqlclient.so.18