使用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
相关产品推荐
相关产品推荐

