You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopify主题应用扩展调用后端API遇CORS拦截问题排查

Shopify主题应用扩展CORS错误排查与解决
  • 移除前端请求中的无效请求头
    前端fetch里添加的Access-Control-Allow-Origin是后端返回给前端的响应头,前端请求时携带它毫无意义,反而可能干扰请求逻辑。修改后的fetch代码:

    fetch('https://someOtherNR.eu.ngrok.io/api/test?shop=myshopname.myshopify.com&host=someNr', {
      mode: "cors",
      method: "GET"
    }).then(function (response) {
      console.log('success!', response);
    }).catch(function (err) {
      console.warn('Something went wrong.', err);
    });
    
  • 修正请求URL的格式错误
    从报错信息的URL能看到:https://04eb-2a02-810d-e80-d840-9881-bdd5-5357-265b.eu.ngrok.io/?shop=...&host=c2hvcGFibGUtc3RyZWFtLm15c2hvcGlmeS5jb20vYWRtaW4/api/test,这里host参数值里包含了/api/test,导致实际请求的后端路径是根路径/,而非你期望的/api/test。
    正确的URL应该把/api/test放在查询参数之前,比如:https://xxx.eu.ngrok.io/api/test?shop=xxx&host=xxx,确保后端的/api/test路由能被正确命中,CORS配置才会生效。

  • 确认后端CORS中间件的挂载顺序
    必须保证app.use(cors({ origin: '*' }))在所有路由定义之前挂载。如果路由定义在CORS中间件之前,这些路由不会应用CORS配置,自然不会返回Access-Control-Allow-Origin头。示例正确顺序:

    const cors = require('cors');
    const express = require('express');
    const app = express();
    
    // 先挂载CORS中间件
    app.use(cors({ origin: '*' }));
    
    // 再定义业务路由
    app.get('/api/test', (req, res) => {
      res.send('Test response');
    });
    
    app.listen(3000);
    
  • 验证后端是否返回CORS头
    用Postman或curl直接请求后端/api/test接口,检查响应头里是否包含Access-Control-Allow-Origin: *。如果没有,说明CORS配置未生效,需要检查:是否安装了cors依赖(执行npm install cors)、是否有其他安全中间件覆盖了CORS设置。

内容的提问来源于stack exchange,提问作者Lunatic Coding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:20:50