MySQL XDevAPI 如何返回成功状态
Posted
技术标签:
【中文标题】MySQL XDevAPI 如何返回成功状态【英文标题】:MySQL XDevAPI How to return a successful status 【发布时间】:2020-07-11 18:25:37 【问题描述】:使用与 mysql 对话的 XDEVAPI 开发我的 RestAPI。这段代码用于添加新记录,
myRecord.add = (newmyRecord, res) =>
mysql.getSession(mydb) // .getSession() is a Promise, returns a session
.then
(
sess =>
sess.getSchema("myschema").getTable("mytable").insert(...).execute(row=>console.log('inserted'));
res.send(200); // resulting "UnhandledPromiseRejectionWarning: TypeError: res.send is not a function"
//return 200; // Postman still shows "Sending" and Fiddler does not show status 200
);
所以我的问题是如何发送成功的 200 来完成 POST?
【问题讨论】:
【参考方案1】:execute()
方法还返回一个Promise
,对于insert()
,它不期待任何类型的回调,因此永远不会调用以下行:
console.log('inserted')
execute()
期望回调的唯一实例是 TableSelect
和 CollectionFind
。而且我们正在慢慢摆脱这种 API 风格,因为现在您还可以通过在 Result
解析为的 Result
实例上调用 fetchOne()
或 fetchAll()
来处理结果集(参见 DocResult
和 @ 987654325@)。
在任何情况下,没有什么可以阻止 res.send(200)
调用的发生,也没有什么隐式更改底层 HTTP 框架(您似乎正在使用)的 API。因此,您提到的问题似乎与 MySQL X DevAPI 连接器无关。
TypeError: res.send is not a function
您可能在调用 res
对象之前(以及在调用 add()
之前)覆盖了它。
这可能没什么帮助,但这是我现在可以从您的帖子中提取的唯一内容。
免责声明:我是 MySQL X DevAPI Connector for Node.js 的首席开发人员
【讨论】:
虽然没有提供解决方案,但非常感谢详细的解释!我找到了解决方案:1)将res
替换为result
,即myRecord.add = (newmyRecord, res)
变为myRecord.add = (newmyRecord, result)
。 2) 用result(null);
替换res.send(200);
不太清楚为什么,但效果很好。
其实不用替换res
,但是res(null)
可以工作。
一个后续问题,.insert()
应该返回一个execute() → Promise.<module:Result>
,因此根据文档它返回行数,其他类似getAffectedItemsCount()
。但是 Watch 没有显示任何可用的。
不确定我是否在关注。如果插入一行然后result.getAffectedItemsCount()
返回1
(在操作范围内插入的行数),它不会返回表中存在的总行数。
学习后,我确实覆盖了 res.好建议!以上是关于MySQL XDevAPI 如何返回成功状态的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中使用 mysql xdevapi 设置 DateTime
mysql-xdevapi getCollections 承诺返回值