Amplify GraphQL字符串数组字段设置@default默认值报错求助
解决Amplify GraphQL数组字段默认值设置问题
你遇到的核心问题是Amplify的@default指令当前仅支持标量类型(如String、Int、Boolean),不直接支持数组作为默认值。下面提供两种可靠的解决方式:
方法一:使用Lambda触发器(后端保障,推荐)
通过给Card类型的Create事件添加Lambda触发器,在创建资源时自动填充默认数组:
- 执行命令更新API配置:
amplify update api
选择你的GraphQL API,接着选Enable Lambda Triggers选项。
选择要触发的类型为
Card,触发事件勾选Create。Amplify会自动生成对应的Lambda函数。打开生成的Lambda函数代码(路径:
amplify/backend/function/<你的函数名>/src/index.js),修改handler逻辑:
exports.handler = async (event) => { // 当canRead未提供或为空时,设置默认值 if (!event.arguments.input.canRead || event.arguments.input.canRead.length === 0) { event.arguments.input.canRead = ["Admins", "Users"]; } return event; };
- 部署修改:
amplify push
之后所有创建Card的操作,只要未指定canRead字段,都会自动带上默认的数组值。
方法二:前端逻辑补全(简单快速,依赖前端)
在前端调用创建Card的接口时,主动补全默认值:
import { API, graphqlOperation } from 'aws-amplify'; import { createCard } from './graphql/mutations'; const createNewCard = async (cardInfo) => { // 如果用户没传canRead,就用默认数组 const input = { ...cardInfo, canRead: cardInfo.canRead || ["Admins", "Users"] }; await API.graphql(graphqlOperation(createCard, { input })); };
这种方式无需修改后端,但如果有其他创建Card的渠道(比如后端直接写入数据库),默认值不会生效。
为什么直接用@default不行?
Amplify GraphQL的@default指令目前仅支持标量类型作为参数值,数组属于列表类型不在支持范围内,所以直接传入["Admins", "Users"]会触发类型校验错误。自定义标量类型虽然可行,但需要额外处理序列化/反序列化,性价比远不如上述两种方法。
内容的提问来源于stack exchange,提问作者JimmyTheCode
相关产品推荐
相关产品推荐

