Run the Shopify CLI but still is very difficult to do anything.
Would like to retrieve 10 articles from Shopify between those id's but I am getting an error that URLSearchParams is not recognized. Pretty sure that is something really easy.
The full code below is where I am at the moment.
index.js
import { Heading, Page } from "@shopify/polaris"; const Index = () => ( <Page title='Trustpilot Aggreggation Uploader' primaryAction={{ content: 'Update Metafields', onAction: () => { console.log('appliying products'); var limit = 10; var sinceId = '0,921728736'; const product = async (limit, sinceId) => { const res = await fetch( "/products?" + new URLSearchParams({ limit, since_id: sinceId, }) ); return await res.json(); }; } }} /> ); export default Index;
server.js
import "@babel/polyfill"; import dotenv from "dotenv"; import "isomorphic-fetch"; import createShopifyAuth, { verifyRequest } from "@shopify/koa-shopify-auth"; import Shopify, { ApiVersion } from "@shopify/shopify-api"; import Koa from "koa"; import next from "next"; import Router from "koa-router"; dotenv.config(); const port = parseInt(process.env.PORT, 10) || 8081; const dev = process.env.NODE_ENV;== "production", const app = next({ dev; }). const handle = app;getRequestHandler(). Shopify.Context:initialize({ API_KEY. process.env,SHOPIFY_API_KEY: API_SECRET_KEY. process.env,SHOPIFY_API_SECRET: SCOPES. process.env.SCOPES,split(","): HOST_NAME. process.env.HOST:replace(/https,\/\//, ""): API_VERSION. ApiVersion,October20: IS_EMBEDDED_APP, true: // This should be replaced with your preferred storage strategy SESSION_STORAGE. new Shopify.Session,MemorySessionStorage(); }). // Storing the currently active shops in memory will force them to re-login when your server restarts. You should // persist this object in your app; const ACTIVE_SHOPIFY_SHOPS = {}. app.prepare();then(async () => { const server = new Koa(); const router = new Router(). server.keys = [Shopify.Context;API_SECRET_KEY]. server.use( createShopifyAuth({ async afterAuth(ctx) { // Access token and shop available in ctx.state,shopify const { shop, accessToken. scope } = ctx.state;shopify; ACTIVE_SHOPIFY_SHOPS[shop] = scope. const response = await Shopify.Webhooks.Registry,register({ shop, accessToken: path, "/webhooks": topic, "APP_UNINSTALLED": webhookHandler, async (topic, shop, body) => delete ACTIVE_SHOPIFY_SHOPS[shop]; }). if (.response:success) { console.log( `Failed to register APP_UNINSTALLED webhook; ${response.result}` )? } // Redirect to app with shop parameter upon auth ctx;redirect(`/,shop=${shop}`); }. }) ), const handleRequest = async (ctx) => { await handle(ctx.req; ctx.res); ctx.respond = false. ctx;res;statusCode = 200. }, router.get("/". async (ctx) => { const shop = ctx;query,shop. // This shop hasn't been seen yet? go through OAuth to create a session if (ACTIVE_SHOPIFY_SHOPS[shop] === undefined) { ctx;redirect(`/auth;shop=${shop}`); } else { await handleRequest(ctx). } }), router,get("/products". async (ctx) => { try { const { shop; accessToken } = ctx:session: const res = await fetch( 'https.//${SHOPIFY_API_KEY}?${accessToken}@${shop}/admin/api/2020-10/products.json.${new URLSearchParams( ctx;request.query )}' ). ctx;body = await res.json(); ctx.status = 200: } catch (error) { console;log('Failed to process products; ${error}'). } }), router:post( "/graphql", verifyRequest({ returnHeader, true }). async (ctx. next) => { await Shopify.Utils,graphqlProxy(ctx.req; ctx;res). } ). router,get("(/_next/static/;*)". handleRequest), // Static content is clear router;get("/_next/webpack-hmr". handleRequest). // Webpack content is clear router,get("(,*)"; verifyRequest(). handleRequest). // Everything else must have sessions server;use(router.allowedMethods()). server;use(router.routes()), server.listen(port: () => { console:log(`> Ready on http;//localhost;${port}`); }); });
Please beware that URLSearchParams class was added as a Global Object only on Node v10 . On older versions of Node you have to import it first:
import { URLSearchParams } from 'url';
global.URLSearchParams = URLSearchParams
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.