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

Vue调用Node.js接口遇CORS预检请求失败(IIS部署后)求助

解决Vue调用Node.js接口的CORS预检错误(部署到IIS后出现)

问题诊断

错误核心:预检请求(OPTIONS)未返回HTTP 200状态,开发环境正常但IIS部署后异常,根源是Node服务CORS配置冲突+IIS未正确转发OPTIONS请求。

现有代码问题

你同时使用了自定义CORS头中间件和cors包,规则重复冲突导致预检响应头混乱;且IIS默认可能拦截OPTIONS请求,不转发到Node应用。

修复步骤

1. 简化Node.js的CORS配置,移除重复逻辑

删除自定义CORS头设置,仅保留cors包统一配置,避免规则冲突:

const cors = require('cors');
const router = express.Router()

// 统一CORS配置,覆盖所有路由
const corsOptions = {
    origin: "http://0.0.0.0:1050", // 生产环境替换为实际前端域名
    methods: "GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS",
    preflightContinue: false,
    optionsSuccessStatus: 200
};

// 全局应用CORS,无需给单个路由重复添加
router.use(cors(corsOptions));

router.post('/sendsecondarysalesreport', (req, res, next) => {
    try {
        if (req.body.CustomerCode) { // 更严谨的空值判断
            SendSecondarySalesReport(req.body);
            res.json([{ "CustomerCode": req.body.CustomerCode }]);
        } else {
            res.status(404).send({ "Status": false, "Error": "Not Found" }); // 匹配404状态码
        }
    } catch (error) {
        console.log("error", error);
        res.status(500).send(error.message); // 链式调用简化代码
    }
});

module.exports = router ;

2. 配置IIS,确保OPTIONS请求正确转发

修改IIS站点的web.config(无则新建),避免IIS拦截OPTIONS请求:

<configuration>
  <system.webServer>
    <handlers>
      <add name="iisnode" path="server.js" verb="*" modules="iisnode" />
    </handlers>
    <rewrite>
      <rules>
        <rule name="NodeJS" patternSyntax="ECMAScript">
          <match url="/*" />
          <action type="Rewrite" url="server.js" />
        </rule>
      </rules>
    </rewrite>
    <!-- 配置跨域头,确保OPTIONS请求正常响应 -->
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="http://0.0.0.0:1050" />
        <add name="Access-Control-Allow-Methods" value="GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
      </customHeaders>
    </httpProtocol>
    <iisnode nodeProcessCommandLine="&quot;C:\Program Files\nodejs\node.exe&quot;" />
  </system.webServer>
</configuration>

注意:若Node入口文件不是server.js,需对应修改path值;生产环境请将Access-Control-Allow-Origin替换为实际前端域名,不要用*(需携带Cookie时必须指定域名)。

3. 验证修复效果

部署后,用浏览器开发者工具「网络」面板查看OPTIONS请求:

  • 确认响应状态码为200
  • 检查响应头包含正确的Access-Control-*字段

额外优化

  • 前端代码中,response.status是数字类型,将判断逻辑改为if (response.status === 200)
  • 生产环境建议通过反向代理让前后端同域名部署,从根源避免CORS问题,提升安全性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:40:37