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

如何在Node.js的jsdom模块中禁用CORS检查功能?

如何禁用jsdom的CORS检查?

嘿,这个问题我之前做前端测试时也碰到过——jsdom的CORS检查确实会在本地测试时制造麻烦,而生产环境完全正常,太烦人了!

首先明确回答你:完全可以禁用jsdom的CORS检查,而且确实能通过初始化配置实现,但你写的cors: false参数是无效的——jsdom并没有这个直接的配置项,得用它提供的资源加载相关配置来实现。

下面给你两种可行的配置方式:

方式一:重写fetch方法强制跳过CORS检查

这是最直接可控的方式,通过自定义resources里的fetch逻辑,强制所有请求使用no-cors模式,绕过CORS验证:

const { JSDOM } = require('jsdom');

const window = new JSDOM(``, {
    // 如果你的测试需要运行页面内的脚本,必须开启这个(注意安全风险)
    runScripts: "dangerously",
    resources: {
        fetch: (url, options) => {
            // 覆盖默认fetch,强制添加no-cors模式
            return fetch(url, { ...options, mode: 'no-cors' });
        }
    },
    // 模拟浏览器的视觉环境,部分资源加载(比如图片、样式)需要这个
    pretendToBeVisual: true
}).window;

方式二:使用预配置的资源加载模式

如果你不需要自定义fetch逻辑,也可以用resources: "usable"来让jsdom更宽松地处理资源加载,配合pretendToBeVisual也能绕过大部分CORS问题:

const { JSDOM } = require('jsdom');

const window = new JSDOM(``, {
    runScripts: "dangerously",
    resources: "usable",
    pretendToBeVisual: true
}).window;

补充说明

为什么生产环境没这个问题?因为实际浏览器中,要么你的请求是同域的(自然不受CORS限制),要么后端已经配置了正确的CORS响应头;而jsdom作为模拟环境,默认会严格执行同源策略检查,所以测试时才会出现本地没有的错误。

另外要注意:runScripts: "dangerously"这个选项要谨慎使用,只有在你完全信任测试页面的脚本时才开启,避免潜在的安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:53:50