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

Node.js已配置CORS的接口Postman请求正常,Flutter报CORS错误如何解决

CORS报错问题解决方案

Postman作为独立客户端不会执行浏览器同源策略校验,所以请求正常,而Flutter Web运行在浏览器容器中会触发CORS检查,你可以按以下步骤排查修复:

1. 修正Node.js端CORS配置

你当前的配置存在重复规则冲突问题,app.use(cors())已经会自动注入CORS响应头,手动重复设置res.set的跨域头反而可能导致规则失效,按如下代码修改配置:
首先确保已安装cors依赖:
npm install cors
替换原代码:

const cors = require('cors');
// 全局配置CORS规则,开发阶段允许所有源访问
app.use(cors({
  origin: "*",
  methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
  allowedHeaders: "*"
}));
// 统一处理所有OPTIONS预检请求,直接返回200状态码
app.options('*', cors());

// 业务接口无需再手动设置跨域响应头
app.get('/users', (req, res) => {
    User.find({}, function(err, users){
        if(err)
        {
            return res.status(500).send({err});
        }
        return res.send(users);
    });
});

修改完成后重启Node.js服务生效。

2. 排查Flutter端请求异常

你的报错信息中目标地址为localhost:3000/users缺少http://前缀,优先检查以下项:

  • 若你运行的是Flutter Web版本,确认请求地址完整带http://协议头,你当前写的baseUrl配置是正确的,可给Dio添加日志拦截器确认实际发起的请求地址无误:
import 'package:dio/dio.dart';

final dio = Dio();
// 添加日志拦截器打印请求详情
dio.interceptors.add(InterceptorsWrapper(
  onRequest: (options, handler) {
    print("请求地址:${options.baseUrl}${options.path}");
    return handler.next(options);
  },
));
final apiClient = ApiClient(dio);
  • 若你运行的是Flutter移动端版本,模拟器/真机中的localhost指向设备本身而非你的开发电脑,需要将baseUrl替换为开发电脑的局域网IP,例如http://192.168.3.22:3000。

3. 开发阶段临时验证方案

如果需要快速验证功能是否正常,可临时禁用浏览器CORS校验:

  • Windows端:右键Chrome快捷方式→属性,在「目标」输入框末尾追加 --disable-web-security --user-data-dir="C:\ChromeDevTemp",保存后打开Chrome即可
  • Mac端:终端执行命令 open -n -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir="/tmp/chrome_dev" --disable-web-security
    使用禁用CORS的浏览器打开调试页面,如果请求正常即可确认是后端CORS配置问题,按第一步修正即可。

内容的提问来源于stack exchange,提问作者Junn Dobit Paras

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:45:07