【问题标题】:Node Server and Apache Server - No 'Access-Control-Allow-Origin' Error节点服务器和 Apache 服务器 - 没有“访问控制允许来源”错误
【发布时间】:2017-11-03 04:42:27
【问题描述】:

我有一个 JS 脚本正在运行,它发送和尝试接收 JSON 数据。

此 JS 脚本在 WAMP 上运行,而另一台服务器作为 Node 服务器运行。 (节点服务器在 localhost:3000)。

尝试发送/接收数据时,控制台中会抛出错误:

XMLHttpRequest 无法加载 http://localhost:3000/?... 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost' 因此不允许访问。

我的 Javascript 代码:

function sendHands(){
    console.log("sending hands");
    var xhr = new XMLHttpRequest();
    var params = getHandsFromDom();
    var hand1 = params[0];
    var hand2 = params[1];
    var url = "http://localhost:3000/?hand1="+hand1+"&"+"hand2="+hand2;
    xhr.open("GET", url, true);
    xhr.setRequestHeader("Content-type", "application/json");
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && xhr.status === 200) {
            var json = JSON.parse(xhr.responseText);
            console.log("player1score: " + json.player1score);
            document.getElementById("result").value = xhr.responseText;
        }
    };
    xhr.send();
}

节点服务器:

const requestHandler = (request, response) => { 
    var urlParts = url.parse(request.url, true),
        urlParams = urlParts.query, //JSON hand data
        body = "";

    // if the request is a GET request
    if(request.method == 'GET'){
        response.writeHead(200, {'Content-Type':'application/json'});
        var body = "";
        var paramData = "";

        request.on('data' , function(data){
            body += data;
        });
        process.on("uncaughtException", function(e){
            console.log("An error occurred: " + e);
        });
        request.on("error", function(e){
            console.log("Error caught!");
        });

        request.on('end', function(){
            var hand1 = JSON.parse(urlParams.hand1),
                hand2 = JSON.parse(urlParams.hand2),
                hand3 = (urlParams.hand3 != null || urlParams.hand3 != undefined)
                            ? JSON.parse(urlParams.hand3) : null,
            //process settlement of given hands
                hands = _assocArrayGenerator(hand1, hand2, hand3),
                settlement = pa.settlement(hands),
                jsonSettlement = {
                    player1score : settlement[0],
                    player2score : settlement[1],
                    player3score : settlement[2]
                };

            response.writeHead(200, {'Content-type':'application/json'});
            console.log("Server accessed. Result: " + settlement);
            response.end(JSON.stringify(jsonSettlement));
        });
    }
};

server.listen(port, (err) => {  
  if (err) {
    return console.log('Error occured with the server: ', err);
  }

  console.log(`Server is listening on http://localhost:${port}`);
})

有人可以向我解释为什么会发生这种情况以及给定修复的工作原理吗?

谢谢!

【问题讨论】:

    标签: javascript node.js xmlhttprequest cross-domain


    【解决方案1】:

    这可能是个好地方 -> "No 'Access-Control-Allow-Origin' header is present on the requested resource"

    记下答案 #2 和 google chrome CORS 扩展。我最近一直在使用它,它 def 派上用场了。

    【讨论】:

      猜你喜欢
      • 2021-07-29
      • 1970-01-01
      • 2019-08-22
      • 2017-03-02
      • 2021-10-08
      • 2014-08-19
      • 2017-06-12
      • 1970-01-01
      • 2017-06-19
      相关资源
      最近更新 更多