我有一个这样定义的突变:
# POST a new Translation
createTranslation(
name: String!
options: [OptionInput!]!
): Translation
据我了解,在
[OptionInput!]!
means that an array is REQUIRED, and an object of the type OptionInput is also REQUIRED.中使用两个引号但是,从我的客户端,我可以在Options数组中没有任何对象的情况下成功进行POST:
const createTranslation = gql`
mutation createTranslation(
$name: String!,
$options: [OptionInput!]!
) {
createTranslation(
name: $name,
options: $options
) {
_id
}
}
`;
即使我期待开箱即用的验证错误(示例响应):
{
"data": {
"translations": [
{
"_id": "59fa1b7a3d4d4805ed6f7539",
"name": "Sample Translation Name!!!",
"options": []
}
]
}
}
确保使用对象数组的子字段不包含任何空值的正确方法是什么?
PS:这是我的输入OptionInput
input OptionInput {
text: String!
value: String!
}
最佳答案
docs指出,如果列表中的类型为非null:
这意味着列表本身可以为null,但不能包含任何内容
空成员。
这意味着空数组仍然有效,但其中任何项目本身为null的数组则无效。[OptionInput]
表示所有这些均有效:
空值
[{},空值]
[{},{}]
[][OptionInput!]
表示所有这些均有效:
空值
[{},{}]
[][OptionInput]!
表示所有这些均有效:
[{},空值]
[{},{}]
[][OptionInput!]!
表示所有这些均有效:
[{},{}]
[]
如果需要防止客户端提供空数组,则需要检查解析器内部参数是否为空数组,然后抛出一个错误。
关于javascript - GraphQL POST通过,即使缺少部分所需模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47062082/