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

Node.js+TypeScript中Fetch请求遇CORS错误,浏览器直接访问正常

问题原因与解决方案

为什么直接访问API正常,Fetch请求却报CORS错误?

浏览器的同源策略仅限制页面中通过XMLHttpRequest/Fetch发起的跨域请求,直接在地址栏输入API地址属于浏览器的直接资源请求,不受同源策略管控。而你的前端页面(比如运行在localhost:3000)发起的Fetch请求,是从当前域名向API所在域名发送跨域请求,此时浏览器会要求API服务器返回CORS相关响应头(比如Access-Control-Allow-Origin),如果服务器没配置这些头,浏览器就会拦截请求并抛出CORS错误。

为什么用{mode: 'no-cors'}后无法访问响应体?

no-cors模式下,浏览器会将请求转为不透明响应(opaque response),这种响应的状态码为0,响应头和响应体都被浏览器屏蔽,无法读取。该模式仅适用于请求无需读取响应的资源(如图片、静态脚本),完全不适合获取JSON数据的场景。

可行的解决方案

1. 配置API服务器的CORS响应头

在API服务器端添加CORS相关响应头,以Node.js Express为例:

import express from 'express';
const app = express();

// 生产环境建议替换为具体前端域名,不要用*
app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', 'http://你的前端域名');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
  next();
});

// 你的API路由
app.get('/feed', (req, res) => {
  res.json({ data: '你的JSON数据' });
});

app.listen(3001);

配置后,浏览器会认可跨域请求,你的Fetch代码就能正常读取响应体。

2. 前端使用反向代理

如果无法修改API服务器配置,可在前端开发环境中配置反向代理,将API请求转发到目标服务器,让前端请求变为同源请求。以Vite为例,在vite.config.ts中添加:

import { defineConfig } from 'vite';

export default defineConfig({
  server: {
    proxy: {
      '/api': {
        target: 'https://目标API的完整域名',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '')
      }
    }
  }
});

之后前端Fetch请求改为:

async function fetchFeed() {
  try {
    const response = await fetch('/api'); // 代理路径
    const posts = await response.json();
    console.log(posts);
  } catch (err) {
    console.log('获取帖子失败:', err);
  }
}

3. 确认调用场景:Node.js后端调用无需处理CORS

如果是Node.js后端代码调用API(而非前端页面的Fetch),CORS限制完全不适用,直接使用node-fetch或axios即可:

import fetch from 'node-fetch';

async function fetchFeed() {
  try {
    const response = await fetch(`${BASIC_URL}`);
    const posts = await response.json();
    console.log(posts);
  } catch (err) {
    console.log('获取帖子失败:', err);
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:12:32