我正在使用Axios向不同域中的API服务器创建HTTP请求。
http://localhost:3000
的跨域请求。http://localhost:3000
中运行,并从浏览器发出请求。到目前为止,没有问题。跨域请求工作正常。但是,最近我想为这些API调用添加单元测试。由于我正在使用jsdom
,所以此测试环境为Jest
。当我从服务器端创建HTTP请求时,这引起了一个问题,即源设置为http://localhost
,服务器不允许。
该请求是使用Axios发出的:
axios.post(`${API_DOMAIN}/member/account/login`, {
username,
password,
}, {
headers: {
Origin: 'http://localhost:3000'
}
})
但是,响应仍然表明
error: Cross origin http://localhost forbidden
如何将我在jsdom下使用Axios创建的HTTP请求的“来源”更改为http://localhost
以外的其他内容?我需要将其设置为http://localhost:3000
,以便API服务器允许我使用。
答案 0 :(得分:3)
事实证明,jsdom
是发出源localhost
并阻止跨域请求的人。通过https://github.com/axios/axios/issues/1180,我得以解决自己的问题。在测试套件中,将此代码放置在axios的任何HTTP请求之前:
axios.defaults.adapter = require('axios/lib/adapters/http')
这将使Axios使用NodeJS的HTTP适配器而不是JSDOM的XMLHttpRequests。这样就不会有跨域问题。