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

使用fly.io部署Node.js应用时注册接口出现CORS错误求助

解决方案
  • 确认CORS中间件加载顺序
    Express的中间件按注册顺序执行,必须保证app.use(cors())在所有路由定义之前。如果路由(比如app.post('/register', ...))先于CORS中间件注册,预检的OPTIONS请求会先匹配路由,但路由未处理OPTIONS方法,就会返回404。调整顺序示例:

    const cors = require('cors');
    const express = require('express');
    const app = express();
    
    // 先加载CORS中间件
    app.use(cors());
    // 再定义路由
    app.post('/register', (req, res) => {
      // 注册逻辑
    });
    
  • 显式处理OPTIONS预检请求
    针对/register路由单独配置OPTIONS方法的CORS处理,确保预检请求能正确返回:

    // 处理/register的OPTIONS预检
    app.options('/register', cors());
    app.post('/register', (req, res) => {
      // 注册逻辑
    });
    
  • 检查fly.io部署配置
    打开fly.toml文件,确认internal_port和你的Node.js服务监听端口一致。比如服务用app.listen(3000),则fly.toml需设置:

    [[services]]
      internal_port = 3000
      # 其他配置...
    

    端口不匹配会导致请求无法到达服务,返回404。

  • 验证部署的代码版本
    可能部署了未添加CORS中间件的旧代码,执行fly deploy重新部署最新代码,部署完成后用fly logs查看实时日志,确认请求是否到达服务。

  • 显式配置CORS参数
    尝试指定允许的源、方法,确保配置生效:

    app.use(cors({
      origin: 'http://localhost:19006',
      methods: ['GET', 'POST', 'OPTIONS'],
      allowedHeaders: ['Content-Type']
    }));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:47:08