gpt4 book ai didi

node.js - 跨源 HTTP 请求源自服务器端 NodeJS/Axios/JSDOM

转载 作者:搜寻专家 更新时间:2023-10-31 23:40:01 25 4
gpt4 key购买 nike

我正在使用 Axios 创建对不同域中的 API 服务器的 HTTP 请求。

  • API 服务器允许来自 http://localhost:3000 的跨源请求。
  • 我无法控制 API 服务器。
  • 我的应用程序通常在 http://localhost:3000 中运行并从浏览器发出请求。

到目前为止没有问题。跨源请求工作正常。但是,最近我想为那些 API 调用添加一个单元测试。这个测试环境是jsdom,因为我使用的是Jest。当我从服务器端创建 HTTP 请求时,这会引发问题,源设置为服务器不允许的 http://localhost

使用axios发出请求:

axios.post(`${API_DOMAIN}/member/account/login`, {
username,
password,
}, {
headers: {
Origin: 'http://localhost:3000'
}
})

但是,响应还是这样说

错误:跨源 http://localhost forbidden

如何将我在 jsdom 下使用 Axios 创建的 HTTP 请求的“来源”更改为 http://localhost 以外的来源?我需要它是 http://localhost:3000 以便 API 服务器允许我。

最佳答案

事实证明,jsdom 是制作来源 localhost 的人,并阻止了跨域请求。来自 https://github.com/axios/axios/issues/1180我能够解决我的问题。在测试套件中,将此代码放在 axios 的任何 HTTP 请求之前:

axios.defaults.adapter = require('axios/lib/adapters/http')

这将使 Axios 使用 NodeJS 的 HTTP 适配器而不是 JSDOM 的 XMLHttpRequests。这样就不会有跨域问题。

关于node.js - 跨源 HTTP 请求源自服务器端 NodeJS/Axios/JSDOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51054286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com