使用Apollo Client批量创建Directus event_datetime数据报错求助
解决Directus批量创建数据时的sort字段GraphQL错误
问题分析
你遇到的错误根源是GraphQL接口期望sort字段为整数类型,但实际传递的是数组原型上的sort方法(一个函数)。虽然你没有显式传入sort字段,但大概率是以下两种情况导致:
- Directus中
event_datetime模型的sort字段被设置为必填项,且类型为整数,GraphQL自动生成的输入类型强制要求提供该字段,序列化过程中意外读取了数组的sort方法。 - React Native环境的对象序列化逻辑异常,将数组的原型方法误当作属性传递给了接口。
解决方案
1. 显式传入sort字段
给每个待创建的条目添加整数类型的sort值,比如按数组索引赋值:
const datesToCreate = [ { timezone: "Test/Shit", sort: 0 }, { timezone: "Test/Shit2", sort: 1 } ];
2. 修改Directus模型字段配置
登录Directus后台,找到event_datetime模型的sort字段:
- 取消字段的必填选项,改为可选。
- 确认字段类型为
整数,如果业务不需要该字段,可直接删除。
3. 清理数组序列化内容
如果是React Native序列化逻辑导致的问题,可将数组转换为纯JSON对象,去除原型方法:
const datesToCreate = [ { timezone: "Test/Shit" }, { timezone: "Test/Shit2" } ]; // 清理数组,剥离原型方法 const cleanData = JSON.parse(JSON.stringify(datesToCreate)); await useCreateDateMutation({ variables: { data: cleanData, }, onCompleted: (data) => { dateIds.push(...data); }, onError: (error) => { console.log(error); }, });
4. 验证GraphQL输入类型
通过Directus的GraphQL playground(通常是项目域名下的/graphql路径)查看create_event_datetimes_input的定义,确认sort字段是否带有!标记(带有则表示必填):
input create_event_datetimes_input { sort: Int! # 带!则为必填 # 其他字段... }
内容的提问来源于stack exchange,提问作者Moiz_Ali
相关产品推荐
相关产品推荐

