使用 React 和 Node 问题构建 Shopify Ap

Whi*_*Mai 5 javascript node.js shopify shopify-app shopify-api-node

我正在遵循 Shopify 提供的 Shopify 应用程序开发方法,但我的本地主机不断收到错误消息 - 外部服务器错误,终端中的原因是“上下文尚未正确初始化”。请调用 .initialize() 方法来设置您的应用程序上下文对象。但不确定如何在下面的 server.js 文件中执行此操作;

require('isomorphic-fetch');
const dotenv = require('dotenv');
const Koa = require('koa');
const next = require('next');
const { default: createShopifyAuth } = require('@shopify/koa-shopify-auth');
const { verifyRequest } = require('@shopify/koa-shopify-auth');
const session = require('koa-session');

dotenv.config();

const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

const { SHOPIFY_API_SECRET_KEY, SHOPIFY_API_KEY } = process.env;

app.prepare().then(() => {
  const server = new Koa();
  server.use(session({ secure: true, sameSite: 'none' }, server));
  server.keys = [SHOPIFY_API_SECRET_KEY];

  server.use(
    createShopifyAuth({
      apiKey: SHOPIFY_API_KEY,
      secret: SHOPIFY_API_SECRET_KEY,
      scopes: [
        'read_products',
        'write_products',
        'read_script_tags',
        'write_script_tags'
      ],
      afterAuth(ctx){
        const { shop, accessToken } = ctx.session;

        ctx.redirect('/');
      },
    }),
  );

  server.use(verifyRequest());
  server.use(async (ctx) => {
    await handle(ctx.req, ctx.res);
    ctx.respond = false;
    ctx.res.statusCode = 200;
    return
  });

  server.listen(port, () => {
    console.log(`> Ready on http://localhost:${port}`);
  });
});
Run Code Online (Sandbox Code Playgroud)

Aur*_* B. 8

Shopify 的应用程序开发已更新了一些内容(取决于您的软件包版本)。

您现在需要初始化 Shopify 上下文。

// ...

const { default: Shopify, ApiVersion } = require('@shopify/shopify-api');

// ...

Shopify.Context.initialize({
  API_KEY: process.env.SHOPIFY_API_KEY,
  API_SECRET_KEY: process.env.SHOPIFY_API_SECRET,
  SCOPES: process.env.SHOPIFY_API_SCOPES.split(","),
  HOST_NAME: process.env.SHOPIFY_APP_URL.replace(/https:\/\//, ""),
  API_VERSION: ApiVersion.October20,
  IS_EMBEDDED_APP: true,
  SESSION_STORAGE: new Shopify.Session.MemorySessionStorage(),
});

// ...
Run Code Online (Sandbox Code Playgroud)

当然,您需要对 server.js 文件应用其他小的更新。

为了更精确,您可以直接查看官方 Shopify React/Node 应用程序开发教程源代码: https://github.com/Shopify/shopify-app-node/blob/tutorial_listen_for_store_events/server.js