THIS WAS DESTROYING ME FOREVER.
As soon as I got rid of the koa-bodyparser middleware, it worked.
Digging through the shopify-graphql-proxy.js in my node modules folder:
case 2:
if (accessToken == null || shop == null) {
ctx.throw(403, 'Unauthorized');
return [2 /*return*/];
}
console.log(ctx.request.body, accessToken);
return [4 /*yield*/, koa_better_http_proxy_1.default(shop, {
https: true,
parseReqBody: false,
// Setting request header here, not response. That's why we don't use ctx.set()
// proxy middleware will grab this request header
headers: {
'Content-Type': 'application/json',
'X-Shopify-Access-Token': accessToken,
},
proxyReqPathResolver: function () {
return exports.GRAPHQL_PATH_PREFIX + "/" + version + "/graphql.json";
},
})(ctx,
/*
We want this middleware to terminate, not fall through to the next in the chain,
but sadly it doesn't support not passing a `next` function. To get around this we
just pass our own dummy `next` that resolves immediately.
*/
noop)];
Ignore the console.log(ctx.request.body, accessToken), that was something I added to the file.
The parseReqBody: false in the koa_better_http_proxy_1.default settings was the hint that I needed to disable the koa-bodyparser.
This is the query I used to finally get a 200 response and returned data in one of my served HTML files (I’m using Koa and serving HTML with the koa-ejs templating engine, no React):
const scripts = (async function getScripts(){
const GET_SCRIPTS = JSON.stringify({
query: `query scriptTags {
scriptTags(first: 100){
edges {
node {
src
id
}
cursor
}
pageInfo {
hasNextPage
}
}
}`
});
console.log(GET_SCRIPTS);
let res = await fetch('/graphql', {
method: 'POST',
credentials: 'include',
headers: {
'Content-Type': 'application/json'
},
body: GET_SCRIPTS,
});
let json = await res.json();
console.log(json);
return json;
})();
console.log(scripts);
I hope this helps ![]()