【问题标题】:How to get basic Shopify GraphQL Admin API working with nodeJS?如何让基本的 Shopify GraphQL Admin API 与 nodeJS 一起使用?
【发布时间】:2021-06-05 10:41:49
【问题描述】:

昨天晚上我度过了一个非常令人沮丧的夜晚,试图让基本的 Shopify GraphQL Admin API 示例与 nodeJS 一起工作。原始 Shopify 示例代码为 here

问题是我的代码返回状态 400 - 错误请求。

我已在我的商店中启用了“私人应用程序”并启用了所有具有读取权限的 API。我从 Shopify 小心地复制了 apiKey、accessToken 和商店名称。

谁能指出我的代码是否有问题?非常感谢。

代码:

import fetch from 'node-fetch';

const apiKey = 'xxxx';
const accessToken = 'yyyy';
const store = 'zzzz';
const hostName = store + '.myshopify.com';
const apiVersion = '2021-01';
const apiLocation = '/admin/api/';

const rootUrl = 'https://' + apiKey + ':' + accessToken + '@' + hostName + apiLocation + apiVersion + '/';

const shopGraphQl = 'https://' + hostName + apiLocation + apiVersion + '/graphql.json';
//const shopGraphQl2 = rootUrl + 'graphql.json';
//const urlTest = rootUrl + 'orders.json';

const url = shopGraphQl;

const body = {
    query: `{
        shop {
            name
          }
      }`
};

fetch   (
    url,
    {
        method: "POST",
        headers: {
            "Content-Type": "application/json",
            "X-Shopify-Access-Token" : accessToken
        },
        body: JSON.stringify({
            body
        })
    }
)
.then(res => {
    console.log('status = ' + res.status + ' , ' + res.statusText);
})
.then(json => {
    console.log("data returned:\n", json);
})
.catch(err => console.error(err));; 

【问题讨论】:

  • 如果你要JSON.stringify body.query,为什么要把它包装成一个模板字符串
  • 好的,我在文档中看到是这样的
  • 我看到的与文档之间的唯一区别是文档没有定义 api 版本,apiVersion, '2021-01'
  • 是的,我在 URL 上尝试了多种排列方式。还是没有运气
  • 是的,我也试过了……下面的答案已经为我解决了这个错误:) 感谢您的输入。

标签: node.js graphql shopify node-fetch shopify-api


【解决方案1】:

看来您发送的正文不正确。您发送正文的方式会导致{body: { query: { shop { name } } } }

代替:

body: JSON.stringify({body})

改成:

body: JSON.stringify(body)

从 fetch 接收数据

您已经注意到您的 console.log 语句 console.log("data returned:\n", json); 正在返回 undefined。这样做的原因是您需要从响应中提取 json (res.json())。

return fetch (
    url,
    {
        method: "POST",
        headers: {
            "Content-Type": "application/json",
            "X-Shopify-Access-Token" : accessToken
        },
        body: JSON.stringify(body)
    }
)
.then(res => {
    console.log(`status = ${res.status}, ${res.statusText}`);
    return res.json();
})
.then(json => {
    console.log("data returned:\n", json);
})
.catch(err => console.error(err));; 

这是使用fetch的不错参考

【讨论】:

  • 非常感谢!这已经解决了它,现在给了我状态 200。
  • 出于兴趣:你也知道我为什么返回 Promise { } 数据返回:未定义
  • 你应该从你的获取中返回承诺:return fetch(url,...。你从哪里看到这个结果?
  • 感谢您的指点。我将在今天晚些时候对此进行深入研究。非常感谢。这个函数是我的测试程序中唯一运行的函数。
  • 您没有从 fetch 中获取 JSON 数据。我会把它添加到答案中
猜你喜欢
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 2021-04-14
  • 1970-01-01
  • 2021-11-05
  • 2017-11-11
  • 2014-12-31
  • 2019-04-29
相关资源
最近更新 更多