我正在使用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'
}
})
不过,回复还是说error: Cross origin http://localhost forbidden
如何将我在jsdom下使用Axios创建的HTTP请求的“来源”更改为http://localhost
以外的其他名称?我需要将其更改为http://localhost:3000
,以便API服务器允许。
2条答案
按热度按时间c6ubokkw1#
原来
jsdom
是发起源localhost
并阻止跨源请求的人。从https://github.com/axios/axios/issues/1180中我能够解决我的问题。在测试套件中,将以下代码放在axios的任何HTTP请求之前:这将使Axios使用NodeJS的HTTP适配器而不是JSDOM的XMLHttpRequests,这样就不会有跨源问题。
tktrz96b2#
补充@Arkross的回答,
axios/lib/adapters/http
不被封装暴露。相反,您可以执行以下操作: