FaunaDB FQL - 未找到 form/function,或参数键无效:{ params }
FaunaDB FQL - No form/function found, or invalid argument keys: { params }
我正在学习 FQL 并尝试进行批量更新,但我无法弄清楚自己做错了什么,也无法真正弄清楚错误的真正指向。
这是我的代码:
const updateResult = await serverClient.query(
q.Map(
guests,
q.Lambda(
"guest",
q.Update(q.Var("guest").id, {
data: {
emailSent: q.Var("guest").emailSent,
emailStatus: q.Var("guest").emailStatus,
emailRejectReason: q.Var("guest").emailRejectReason,
},
})
)
)
);
这是客人通过 console.log 反对的内容:
[ { email: 'myemail+bart72320@gmail.com',
emailStatus: 'sent',
emailRejectReason: null,
emailSent: true,
id: Ref(Collection("Guests"), "271884343706649107") } ]
这是与 JSON.stringify 相同的对象:
[
{
"email": "myemail+bart72320@gmail.com",
"emailStatus": "sent",
"emailRejectReason": null,
"emailSent": true,
"id": {
"@ref": {
"id": "271884343706649107",
"collection": {
"@ref": {
"id": "Guests",
"collection": {
"@ref": {
"id": "collections"
}
}
}
}
}
}
}
]
这是返回的部分错误:
{ [BadRequest: invalid expression]
name: 'BadRequest',
message: 'invalid expression',
description:
'No form/function found, or invalid argument keys: { params }.',
requestResult:
RequestResult {
method: 'POST',
path: '',
query: null,
requestRaw:
'{"map":{"lambda":"guest","expr":{"params":{"object":{"data":{"object":{}}}}}},"collection":[{"object":{"email":"myemail+bart72320@gmail.com","emailStatus":"sent","emailRejectReason":null,"emailSent":true,"id":{"@ref":{"id":"271884343706649107","collection":{"@ref":{"id":"Guests","collection":{"@ref":{"id":"collections"}}}}}}}}]}',
requestContent: Expr { raw: [Object] },
responseRaw:
'{"errors":[{"position":["map","expr"],"code":"invalid expression","description":"No form/function found, or invalid argument keys: { params }."}]}',
我已经得到了可以工作的更新和可以工作的 lambda,但不是这个,也许我只是不擅长阅读非常嵌套的、看起来很实用的错误消息。什么是表单,它是否与函数相同,或者我是否缺少键:参数?我不知道该怎么做。
请帮助我理解我做错了什么,如果这个错误消息真的有用,如何解释它,或者它是否只是一个令人困惑的包罗万象?
谢谢!
您将 Javascript 语法与 FQL 表达式混合在一起。
Var("guest")
是一个FQL表达式,但是
Var("guest").id
是 Javascript 语法。 FQL 中点运算符的等价物是
Select("id", Var("guest"))
请记住,FQL 不是在 Javascript 上执行的,而是在服务器端执行的。
我正在学习 FQL 并尝试进行批量更新,但我无法弄清楚自己做错了什么,也无法真正弄清楚错误的真正指向。
这是我的代码:
const updateResult = await serverClient.query(
q.Map(
guests,
q.Lambda(
"guest",
q.Update(q.Var("guest").id, {
data: {
emailSent: q.Var("guest").emailSent,
emailStatus: q.Var("guest").emailStatus,
emailRejectReason: q.Var("guest").emailRejectReason,
},
})
)
)
);
这是客人通过 console.log 反对的内容:
[ { email: 'myemail+bart72320@gmail.com',
emailStatus: 'sent',
emailRejectReason: null,
emailSent: true,
id: Ref(Collection("Guests"), "271884343706649107") } ]
这是与 JSON.stringify 相同的对象:
[
{
"email": "myemail+bart72320@gmail.com",
"emailStatus": "sent",
"emailRejectReason": null,
"emailSent": true,
"id": {
"@ref": {
"id": "271884343706649107",
"collection": {
"@ref": {
"id": "Guests",
"collection": {
"@ref": {
"id": "collections"
}
}
}
}
}
}
}
]
这是返回的部分错误:
{ [BadRequest: invalid expression]
name: 'BadRequest',
message: 'invalid expression',
description:
'No form/function found, or invalid argument keys: { params }.',
requestResult:
RequestResult {
method: 'POST',
path: '',
query: null,
requestRaw:
'{"map":{"lambda":"guest","expr":{"params":{"object":{"data":{"object":{}}}}}},"collection":[{"object":{"email":"myemail+bart72320@gmail.com","emailStatus":"sent","emailRejectReason":null,"emailSent":true,"id":{"@ref":{"id":"271884343706649107","collection":{"@ref":{"id":"Guests","collection":{"@ref":{"id":"collections"}}}}}}}}]}',
requestContent: Expr { raw: [Object] },
responseRaw:
'{"errors":[{"position":["map","expr"],"code":"invalid expression","description":"No form/function found, or invalid argument keys: { params }."}]}',
我已经得到了可以工作的更新和可以工作的 lambda,但不是这个,也许我只是不擅长阅读非常嵌套的、看起来很实用的错误消息。什么是表单,它是否与函数相同,或者我是否缺少键:参数?我不知道该怎么做。
请帮助我理解我做错了什么,如果这个错误消息真的有用,如何解释它,或者它是否只是一个令人困惑的包罗万象?
谢谢!
您将 Javascript 语法与 FQL 表达式混合在一起。
Var("guest")
是一个FQL表达式,但是
Var("guest").id
是 Javascript 语法。 FQL 中点运算符的等价物是
Select("id", Var("guest"))
请记住,FQL 不是在 Javascript 上执行的,而是在服务器端执行的。