【问题标题】:KeystoneJS 'resolveInput' field hook: returning 'resolvedData' from field hook produces GraphQL cast errorKeystoneJS 'resolveInput' 字段挂钩:从字段挂钩返回 'resolvedData' 会产生 GraphQL 转换错误
【发布时间】:2020-05-22 20:39:08
【问题描述】:

我正在尝试修改 KeystoneJS 5 中特定字段的保存数据。resolveInput field hook 似乎是一个好方法。这是上面文档中给出的示例:

const resolveInput = ({
  operation,
  existingItem,
  originalInput,
  resolvedData,
  context,
  actions,
}) => {
  // Input resolution logic
  // Object returned is used in place of resolvedData
  return resolvedData;
};

resolveInput 的返回可以是 Promise 或 Object。它应该 解析为与已解析数据相同的结构。结果是 按执行顺序传递给下一个函数。

因此,我列表中字段的定义是

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 对象。

【问题讨论】:

    标签: graphql keystonejs


    【解决方案1】:

    你是对的:根据@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 })
      )),
    };
    

    返回值分配给 resolvedData 对象内的 field 元素,其中定义了 resolveInput 钩子。

    【讨论】:

      猜你喜欢
      • 2017-09-20
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多