【发布时间】:2020-05-13 15:41:04
【问题描述】:
我将 axios 与 quasar/vue 一起使用。
axios.post(this.serverUrl, null, {params: {blah: "test"}}
params 是第三个参数。我看到它应该是第二名,但是当它是时,我得到了以下信息:
从源“http://localhost:8080”访问“https://example.com”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头出现在请求的资源上。
当它是第三个参数时,一切都很好。
在我需要传递一个 json 数组之前,一切都很好,例如:
var info = [{name: "test", age: 40},{name: "tester", age: 50}]
不管我尝试了什么,包括使用 qs:axios.post(this.serverUrl, null, {params: {dataToSend: info},paramsSerializer: params => { return qs.stringify(params)} 和另一种解析方法
parseParams(params) {
const keys = Object.keys(params);
let options = '';
keys.forEach((key) => {
const isParamTypeObject = typeof params[key] === 'object';
const isParamTypeArray = isParamTypeObject && (params[key].length >= 0);
if (!isParamTypeObject) {
options += `${key}=${params[key]}&`;
}
if (isParamTypeObject && isParamTypeArray) {
params[key].forEach((element) => {
options += `${key}=${element}&`;
});
}
});
return options ? options.slice(0, -1) : options;
},
我开始收到上面的CORS错误。
我的猜测是解析是错误的,但我无法弄清楚如何克服这个问题,即使在阅读了网络上的这么多示例之后也是如此。我的服务器希望收到一个像上面[{name: "test", age: 40},{name: "tester", age: 50}] 这样的 json 数组,所以我需要客户端这样发送它。我正在使用 axios 0.19.1
我错过了什么?谢谢!
更新:
"/api": {
target: "https://myrealdomain.com:8443",
changeOrigin: true,
pathRewrite: {
"^/api": "/mysuffix1/mysuffix2"
}
}
并调用axios.post("api", {...}) 有效,但在现实生活中,文件将与服务器https://myrealdomain.com 位于同一位置,我不需要API 后缀,只需要mysuffix1/mysuffix2。
我可以在 dev 中模拟 changeOrigin 和 prod 一样吗?
【问题讨论】:
标签: javascript cors axios