graphql - KeystoneJS 'resolveInput' 字段挂钩:从字段挂钩返回 'resolvedData' 会产生 GraphQL 转换错误
问题描述
我正在尝试在 KeystoneJS 5 中修改保存特定字段的数据。resolveInput
字段挂钩似乎是一个很好的方法。这是上面文档中给出的示例:
const resolveInput = ({
operation,
existingItem,
originalInput,
resolvedData,
context,
actions,
}) => {
// Input resolution logic
// Object returned is used in place of resolvedData
return resolvedData;
};
resolveInput 的返回可以是 Promise 或 Object。它应该解析为与 resolvedData 相同的结构。结果按执行顺序传递给下一个函数。
因此,我列表中字段的定义是
text: {
type: Wysiwyg,
hooks: {
async resolveInput({ originalInput,resolvedData }) {
console.log('resolvedData');
console.log(resolvedData);
return resolvedData;
}
}
并且开始我只是返回resolvedData
传入的参数,根据文档是
resolvedData Object The data received by the GraphQL mutation plus defaults values
但是,我每次都会收到以下错误
GraphQLError
Cast to string failed for value "{ text: '<p><img src="static/blop.jpg" alt="" width="580" height="388" /><img src="static/blop.jpg" alt="" /></p>' }" at path "text"
我不确定问题是什么或如何解决它——我只是返回传入的相同数据。当我移除钩子时,一切正常。
编辑
我相信答案是不会返回整个resolvedData
对象,而是返回您所在的对象上的字段。因此,在下面的情况下,一个会返回resolvedData.text
(或resolvedData.title
)。我相信文档可以改进,因为它似乎返回了整个resolvedData
对象。
解决方案
你是对的:根据@keystonejs/keystone/lib/List/index.js 中的代码,应该从resolveInput挂钩返回字段对象而不是整个resolvedData对象:
// Run the schema-level field hooks, passing in the results from the field
// type hooks
resolvedData = {
...resolvedData,
...(await this._mapToFields(
this.fields.filter(field => field.hooks.resolveInput),
field => field.hooks.resolveInput({ ...args, resolvedData })
)),
};
返回值分配给定义了resolveInput挂钩的resolvedData对象内的字段元素。
推荐阅读
- python - 如何在抓取网页时单击下一步按钮
- java - 通过意图传递选择性数据
- acumatica - 无法从自定义图表中保存 APTran 记录
- dart - 理解颤振语法
- javascript - 遍历页面中的链接并根据条件单击
- asp.net-mvc - 为什么 connection.hub.start() 工作但 client.all.notify 不工作?
- angular - 找不到项目定义——Angular
- java - 我可以在 .as 类中使用 .xml < context-param > 作为常量吗?
- google-analytics - 所有流量渠道 - 总“用户”计数问题
- unit-testing - 如何使用回车键触发 keyup