使用 React 和 Node 问题构建 Shopify 应用程序
Building Shopify Ap with React and Node issue
我正在关注 shopify 提供的 Shopify 应用程序开发操作方法,但我的本地主机一直收到错误提示 - 外部服务器错误,终端中的原因显示 'Context has not been properly initialized. Please call the .initialize() method to setup your app context object.' 但不确定该怎么做这在我下面的 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}`);
});
});
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(),
});
// ...
您当然需要对 server.js 文件应用其他小更新。
为了更精确,您可以直接查看官方 Shopify React/Node app dev tuto 源代码:
https://github.com/Shopify/shopify-app-node/blob/tutorial_listen_for_store_events/server.js
我正在关注 shopify 提供的 Shopify 应用程序开发操作方法,但我的本地主机一直收到错误提示 - 外部服务器错误,终端中的原因显示 'Context has not been properly initialized. Please call the .initialize() method to setup your app context object.' 但不确定该怎么做这在我下面的 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}`);
});
});
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(),
});
// ...
您当然需要对 server.js 文件应用其他小更新。
为了更精确,您可以直接查看官方 Shopify React/Node app dev tuto 源代码: https://github.com/Shopify/shopify-app-node/blob/tutorial_listen_for_store_events/server.js