Javascript axios、阵列参数和CORS
我在用axios和quasar/vue。Javascript axios、阵列参数和CORS,javascript,cors,axios,Javascript,Cors,Axios,我在用axios和quasar/vue。 axios.post(this.serverUrl,null,{params:{blah:“test”}} 参数是第三个参数。我看到它应该是第二个,但当它是时,我得到了以下信息: CORS策略已阻止从源“”访问“”处的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源”标头 当它是第三个参数时,一切都很好 在我需要传递JSON数组之前,一切都很好,例如: var info=[{name:“test”,年
axios.post(this.serverUrl,null,{params:{blah:“test”}}
参数是第三个参数。我看到它应该是第二个,但当它是时,我得到了以下信息:
CORS策略已阻止从源“”访问“”处的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源”标头
当它是第三个参数时,一切都很好
在我需要传递JSON数组之前,一切都很好,例如:
var info=[{name:“test”,年龄:40},{name:“tester”,年龄: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的上述错误
我的猜测是解析是错误的,但即使在阅读了web上的这么多示例之后,我也不知道如何克服这个问题。我的服务器希望收到一个JSON数组,如上面的[{name:“test”,age:40},{name:“tester”,age:50}]
,所以我需要客户端发送它。我使用的是axios 0.19.1
我错过了什么?谢谢
更新:
"/api": {
target: "https://myrealdomain.com:8443",
changeOrigin: true,
pathRewrite: {
"^/api": "/mysuffix1/mysuffix2"
}
}
调用axios.post(“api”,{…})
是可行的,但在现实生活中,文件将与服务器位于同一位置,我不需要api后缀,只需要mysuffix 1/mysuffix 2
我可以在dev中将changeOrigin模拟为prod吗?您必须在API/Web服务中启用CORS。有关答案,请参阅此问题:
您必须在API/Web服务中启用CORS。有关答案,请参阅此问题:
如果您计划最终将您的Quasar应用程序部署在与调用的API相同的域名上,您可以通过配置代理规则避免在
localhost:8080
上开发时在此API服务器上需要CORS规则。当您在开发模式下使用
$quasar-dev
它启动。此服务器可通过quasar.config.js
进行配置。开发服务器包括一个代理API,可通过从应用程序调用localhost:8080
调用该代理API,然后将其转发到example.com
,通过以下设置更改API请求中的域名:changeOrigin:true
。现在,位于example.com
的API服务器可以看到来自同一原始域的请求,因此不需要CORS规则
devServer: {
// https: true,
port: 8080,
open: true, // opens browser window automatically
// set up one or more proxy rules
proxy: {
// Proxy requests prefixed by /api URL
"/api": {
target: "https://example.com",
changeOrigin: true, // Avoids the need for CORS rule on your API server
// Optionally map /api to the same or a different path on the API server
pathRewrite: {
"^/api": "api"
}
}
}
},
有关更多信息,请参阅
localhost:8080
上开发时在此API服务器上需要CORS规则。当您在开发模式下使用
$quasar-dev
它启动。此服务器可通过quasar.config.js
进行配置。开发服务器包括一个代理API,可通过从应用程序调用localhost:8080
调用该代理API,然后将其转发到example.com
,通过以下设置更改API请求中的域名:changeOrigin:true
。现在,位于example.com
的API服务器可以看到来自同一原始域的请求,因此不需要CORS规则
devServer: {
// https: true,
port: 8080,
open: true, // opens browser window automatically
// set up one or more proxy rules
proxy: {
// Proxy requests prefixed by /api URL
"/api": {
target: "https://example.com",
changeOrigin: true, // Avoids the need for CORS rule on your API server
// Optionally map /api to the same or a different path on the API server
pathRewrite: {
"^/api": "api"
}
}
}
},
有关更多信息,请参阅
访问XMLHttpRequest at'https://example.com“
。你确认了吗确定它将发送到预期的服务器?example.com是真实域名的占位符。那么为什么我的所有其他请求都顺利进行而没有问题呢?我仍然认为这是与解析相关的原因造成的。我说过:CORS只是为了让localhost可以通信?我这样问是因为localhost只是为了测试您的问题n表示在'https://example.com“。您是否验证了它将被发送到预期的服务器?example.com是实际域名的占位符。最终它将与服务本身安装在同一台服务器上。现在,它将在测试阶段调用该服务器/服务。changeOrigin仅用于类星体发展"模式?我问是因为其他请求可以工作,只有这一个不行,这就是为什么我认为问题在于数组的解析。是的……代理规则只适用于quasar dev
模式。我确信您已经检查了网络请求/响应值。在Chrome调试器中检查网络请求/响应中的JSON编码。检查头(尝试使用邮递员或女邮递员发送相同的邮件;)。看看是否可以找出原因。。可能是代理导致了一些问题或您的API服务器。如果启用了CORS规则,则可能需要允许特定的头。我将在回到计算机后进行更彻底的检查。昨天我进行了检查,参数为,例如:&data=&data=etc。我的服务器是否将接收为json array?如果会的话,我会很惊讶。Anwyay,今天晚些时候我会在这里发布一个更改代理后的请求示例。devServer:{https:true,//如果设置为false,页面将加载,如果设置为true,页面将不加载,端口:8080,打开:true,代理:{”/:{target:“,changeOrigin:true,//避免在API服务器上使用CORS规则路径重写:{“^/”:“}}}}我仍然收到相同的CROSJ错误,必须确保:客户端在localhost:8080上运行,并且正在调用myrealdomain.com:8443/API/