我很困惑在使用 Hasura 的中继端点时如何使用 base64 编码的 id。 我的第一个问题是在尝试初始化下拉组合框组件以将"选项值"设置为等于相关表的外键时出现的(见下图(。 我的下一个问题是如何将 ID 传递到参数化查询中(这样我就可以检索具有给定"id"的订单的详细信息(。 由于所有这些标识符都是 base64 编码的,因此不容易做到,我相信我一定在我的理解中遗漏了一些东西。
这些 id 是否专门编码为警告我们根本不应该在我们的代码中依赖或使用它们,或者我们应该解码它们并将它们用于分页、参数化查询和组合框等?希望得到一些帮助来理解。
这是我使用组合框的问题示例:Base64 损坏的组合框
我认为也许使用最新版本的 Hasura,我们现在可以获取数据库 ID。 解码时的base64编码ID是一个数组,因此我们现在可以通过引用数组索引3来获取数据库ID,如下例所示。
const encodedHasuraRelayID = "WzEsICJsaWZlcGxhbiIsICJzdGF0dXNfcGxhbl9oZWFkZXIiLCAxXQ=="
const decodedRelayID = atob(encodedHasuraRelayID)
const relayIdAsArray = eval(decodedRelayID)
const actualDatabaseID = relayIdAsArray[3]
console.log(decodedRelayID) // "[1, "lifeplan", "status_plan_header", 1]"
console.log(relayIdAsArray) // [1, "lifeplan", "status_plan_header", 1]
console.log(actualDatabaseID) // 1 (the actual database ID)!
这似乎有效,尽管我在其他地方读到在javascript中使用eval((是邪恶的,所以如果有人知道从"decodedRelayID"转换为"relayIdAsArray"的更好方法,请告诉我。
讨论中继中的对象 ID 解析