【发布时间】:2017-08-02 22:09:47
【问题描述】:
从数据库取回数据时遇到问题。我正在尽力解释问题。
1.如果我在下面的代码中保留“mode”:“no-cors”,那么我可以使用 Postman 从服务器获取数据,但不能从我自己的服务器获取数据。认为它必须是我的客户端错误
- 当我删除 "mode":"no-cors" 时出现 2 个错误: -Fetch API 无法加载http://localhost:3000/。 Access-Control-Allow-Headers 在预检响应中不允许请求标头字段 access-control-allow-origin。 -Uncaught (in promise) TypeError: Failed to fetch
Quick Browsing 建议输入 "mode":"no-cors" 以修复此错误,但感觉不对。
所以我想也许有人对如何解决这个问题提出了建议。
真的希望我足够清楚,但我很确定我在这里没有给出明确的解释:S
function send(){
var myVar = {"id" : 1};
console.log("tuleb siia", document.getElementById('saada').value);
fetch("http://localhost:3000", {
method: "POST",
headers: {
"Access-Control-Allow-Origin": "*",
"Content-Type": "text/plain"
},//"mode" : "no-cors",
body: JSON.stringify(myVar)
//body: {"id" : document.getElementById('saada').value}
}).then(function(muutuja){
document.getElementById('väljund').innerHTML = JSON.stringify(muutuja);
});
}
【问题讨论】:
-
mode: no-cors将保证无法访问响应。此外,您在代码中使用了 fetch wrong ...,参数muutuja是一个 Response 对象,要获取 json,您需要return muutuja.json()然后在 next 中,参数将是您想要的数据 -
使用 CORS 的简单答案 ...服务器需要允许访问其资源,因此服务器需要适当地发出 CORS 标头 - 因此请求中的
"Access-Control-Allow-Origin": "*"毫无意义(并将触发添加到并发症的预检请求) - 如果 CORS 能够被客户端“绕过”,那么 CORS 将 100% 毫无意义 -
我会看看我是否能够正确获取 @JaromandaX 在本地完成这一切 在我的服务器的 js 代码 res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.header('Access-Control-Allow-Headers', 'Content-Type');
-
哦,所以您确实发出了 CORS 响应标头...您的服务器是否通过添加“非标准”标头来处理您触发的 OPTIONS 飞行前?我认为,如果您从 request 中删除访问控制标头并且 不要 将
mode: 'no-cors'添加到请求中,我认为您的所有问题都会消失 -
@JaromandaX 成功了!!!我确实从 send() 中删除了访问控制,还删除了 mode:'no-cors' 似乎现在效果很好
标签: javascript node.js cors