【问题标题】:GraphQl mutation wrong resultGraphQl 突变错误结果
【发布时间】:2021-01-23 16:05:55
【问题描述】:

我在 Graphql 中对数据进行变异时遇到了一些麻烦。我将原始图像保存到我的数据库中,然后使用 Graphql(外部)对其进行变异。

在代码的以下几点中,我得到了正确的数据

####################111111111111111111#################### ####################222222222222222################### ####################333333333333333####################

但在一点

####################44444444444444444####################

在我改变数据后,我得到了错误的图像 src。它是编辑后的图像 src,而不是我在 revertImages() 函数中从数据库中检索到的原始 src。

虽然我用正确的数据传递了正确的变量“newVariable”,但变异接管了我之前传递的变异函数编辑数据,而是接管了新变量数据。我是否需要清除缓存?

newVariable 数据为:

{
  productId: 'gid://shopify/Product/6166892019882',
    image: {
    altText: '',
      id: 'gid://shopify/ProductImage/23268973543594',
        src: 'https://cdn.shopify.com/s/files/1/0508/3516/1258/products/180622-05-2.jpg?v=1611416719'
  }
}

变异后的结果是:

{
  productImageUpdate: {
    image: {
      altText: null,
        id: 'gid://shopify/ProductImage/23268973543594',
          src: 'https://cdn.shopify.com/s/files/1/0508/3516/1258/products/180622-05-2.jpg?v=1611416762'
    },
    userErrors: []
  }
}

这是我的功能:

const revertImages = async (ctx) => {
  let dataToRevert = ctx.request.body.data;
  const { accessToken } = ctx.session;

  let productsDoc = await Product.find({ productId: { $in: dataToRevert.productId } });

  if (!productsDoc) {
    ctx.throw('Could not find products');
  }
  console.log('####################1111111111111111111####################');
  console.log(productsDoc);
  console.log('####################1111111111111111111####################');
  const res = await revertProductImages(productsDoc, accessToken);

  if (res) {
    console.log('Products reverted');
    ctx.response.status = 200;
  }
}

async function revertProductImages(products, accessToken) {
  console.log('Revert Product Images')
  return new Promise((resolve, reject) => {
    const map = {};
    let updateProduct = null;
    let variables = null;

    products.forEach(async (item) => {
      map[item.productId] = map[item.productId] + 1 || 1;

      variables = {
        "productId": `gid://shopify/Product/${item.productId}`,
        "image": {
          "altText": "",
          "id": `gid://shopify/ProductImage/${item.imageId}`,
          "src": item.originalSrc
        }
      };

      console.log('####################222222222222222####################');
      console.log(variables);
      console.log('####################222222222222222####################');
      updateProduct = await updateProductImage(UPDATE_PRODUCT_BY_ID, variables, accessToken);

      if (updateProduct) {

        const res = await removeProductFromDb(map);

        if (res) {
          resolve(res);
        }
      }

    });
  })
}

async function updateProductImage(queryName, variables, token) {
  console.log('updateProductImage..');

  const newVariable = variables;
  console.log('####################333333333333333####################');
  console.log(newVariable);
  console.log('####################333333333333333####################');
  return new Promise(async (resolve, reject) => {
    let res = null;
    try {
      res = await axios({
        headers: {
          'X-Shopify-Access-Token': token,
        },
        method: 'post',
        data: {
          query: queryName,
          variables: newVariable,
        },
        url: url,
      });
    } catch (err) {
      console.log(err.message);
    }

    if (res) {
      console.log('Image updated ✔️');
      console.log('####################444444444444444444####################');
      console.log(res.data.data);
      console.log('####################444444444444444444####################');
      resolve(res);
    } else {
      reject('Can not update image');
    }
  }).catch((err) => {
    console.log(err);
  });

}

【问题讨论】:

  • 嗨,你能添加你的 Graphql 突变吗?
  • const UPDATE_PRODUCT_BY_ID = mutation ($productId: ID!, $image: ImageInput!) { productImageUpdate(productId: $productId, image: $image) { image { altText id src } userErrors { field message } } } ;

标签: javascript graphql shopify


【解决方案1】:

也许我没有正确理解,但这里有一个答案......

我在此突变的可用字段中找不到 src 属性(我说的不是 ImageInput 而是图像对象)。

您可以尝试以下请求吗:

mutation productImageUpdate($productId: ID!, $image: ImageInput!) {
  productImageUpdate(productId: $productId, image: $image) {
    image {
      id
      originalSrc
      transformedSrc
    }
    userErrors {
      field
      message
    }
  }
}

文档说:

originalSrc : 原始图像的位置作为 URL。

transformedSrc : 转换后图像的位置作为 URL。

也许你所期待的是originalSrc

【讨论】:

猜你喜欢
  • 2022-01-17
  • 2018-12-03
  • 2019-01-08
  • 2019-06-11
  • 2019-05-12
  • 2017-11-10
  • 2016-10-18
  • 2018-07-23
  • 2018-09-20
相关资源
最近更新 更多