提问者:小点点

如何让基本的Shopify GraphQL管理API与nodeJS一起工作?


昨天晚上,我经历了一个非常令人沮丧的夜晚,试图让基本的Shopify GraphQL管理API示例与nodeJS一起工作。原始Shopify示例代码如下。

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

我已经在我的商店上启用了一个“私人应用程序”,并启用了具有读取权限的所有API。我仔细地从Shopify复制了apiKey、访问令牌和商店名称。

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

代码:

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));; 

共1个答案

匿名用户

看起来你把尸体送错了。发送正文的方式将导致{body:{query:{shop{name}}}}

而不是:

body: JSON.stringify({body})

将其更改为:

body: JSON.stringify(body)

您已经注意到您的控制台。日志语句,控制台。日志(“返回的数据:\n”,json)正在返回未定义的。原因是您需要从响应中提取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的不错的参考