一尘不染

未捕获(按承诺)TypeError:无法获取和Cors错误

node.js

从数据库取回数据时遇到问题。我正在尽力解释这个问题。

1.如果在下面的代码中保留“ mode”:“ no-
cors”,则可以使用Postman从服务器获取数据,而不能使用自己的服务器获取数据。认为这一定是我的客户端错误

  1. 当我删除“ mode”:“ no-cors”时,我得到2个错误:-Fetch API无法加载http:// localhost:3000 /。飞行前响应中的Access-Control-Allow-Headers不允许请求标头字段access-control-allow-origin。-未捕获(按约定)TypeError:无法获取

Quick Browsing建议将“ mode”:“ no-cors”置于此位置,该错误已得到解决,但这样做不正确。

所以我想也许有人对如何解决这个问题提出了建议。

真的希望我已经足够清楚,但是可以肯定的是,我在这里没有给出明确的解释:

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);
    });
}

阅读 317

收藏
2020-07-07

共1个答案

一尘不染

添加mode:'no-cors'到请求标头可确保在响应中没有可用的响应

添加“非标准”标头后,该行将'access-control-allow- origin'触发OPTIONS预检请求,您的服务器必须正确处理该预检请求,才能发送POST请求

你也做fetch不对...... fetch返回了一个“承诺”
Response这对于承诺的创造者对象jsontext等等。根据内容类型…

简而言之,如果您的服务器端能够正确处理CORS(从您的注释中可以看出来),则应该可以进行以下操作

function send(){
    var myVar = {"id" : 1};
    console.log("tuleb siia", document.getElementById('saada').value);
    fetch("http://localhost:3000", {
        method: "POST",
        headers: {
            "Content-Type": "text/plain"
        },
        body: JSON.stringify(myVar)
    }).then(function(response) {
        return response.json();
    }).then(function(muutuja){
        document.getElementById('väljund').innerHTML = JSON.stringify(muutuja);
    });
}

但是,由于您的代码对JSON并没有真正的兴趣(毕竟它将对象字符串化),因此操作起来更简单

function send(){
    var myVar = {"id" : 1};
    console.log("tuleb siia", document.getElementById('saada').value);
    fetch("http://localhost:3000", {
        method: "POST",
        headers: {
            "Content-Type": "text/plain"
        },
        body: JSON.stringify(myVar)
    }).then(function(response) {
        return response.text();
    }).then(function(muutuja){
        document.getElementById('väljund').innerHTML = muutuja;
    });
}
2020-07-07