如何在Remix.js版Shopify CLI应用中触发carts_create webhook时写入文件?
实现carts_create webhook的文件写入操作
要在你的Shopify Remix应用中处理carts_create webhook并执行文件写入,按以下步骤修改webhooks.js文件:
1. 引入Node.js文件系统模块
首先添加fs/promises和path模块,用于异步文件操作和路径处理:
import { authenticate } from "../shopify.server"; import db from "../db.server"; import fs from 'fs/promises'; import path from 'path';
2. 添加CARTS_CREATE的处理逻辑
在switch语句中新增CARTS_CREATE分支,解析webhook数据并写入文件:
export const action = async ({ request }) => { const { topic, shop, session } = await authenticate.webhook(request); switch (topic) { case "APP_UNINSTALLED": if (session) { await db.session.deleteMany({ where: { shop } }); } break; // 新增carts_create处理分支 case "CARTS_CREATE": // 解析webhook携带的购物车数据 const cartData = await request.json(); // 构造日志内容,包含时间戳、店铺和购物车信息 const logContent = `[${new Date().toISOString()}] 店铺:${shop} - 购物车创建:\n${JSON.stringify(cartData, null, 2)}\n\n`; // 定义日志文件路径(项目根目录下的cart-creation-logs.txt) const logFilePath = path.resolve(process.cwd(), 'cart-creation-logs.txt'); try { // 追加写入日志文件(如果文件不存在会自动创建) await fs.appendFile(logFilePath, logContent, 'utf8'); } catch (error) { console.error('写入购物车日志失败:', error); // 捕获错误并返回服务器错误响应 throw new Response('处理webhook失败', { status: 500 }); } break; case "CUSTOMERS_DATA_REQUEST": case "CUSTOMERS_REDACT": case "SHOP_REDACT": throw new Response("Unhandled webhook topic", { status: 404 }); default: throw new Response("Unhandled webhook topic", { status: 404 }); } // 处理成功后返回200响应 return new Response(null, { status: 200 }); };
3. 配置Shopify后台的webhook
确保你已经在Shopify店铺后台的设置 > 通知 > Webhooks中,添加carts/create主题的webhook,指向你的应用的webhook路由(通常是https://your-app-url/api/webhooks),并设置正确的签名密钥(和应用配置一致)。
注意事项
- 使用
fs.appendFile而非writeFile,避免每次覆盖之前的日志内容 - 若要写入指定目录(如
logs),需提前创建目录或在代码中添加目录判断与创建逻辑 - 生产环境建议使用专业日志库(如winston)替代简单文件写入,同时做好日志大小管理
内容的提问来源于stack exchange,提问作者Cristian Andes
相关产品推荐
相关产品推荐

