纯粹的本地开发环境抛出CORS错误

时间:2017-12-12 08:08:31

标签: cors local

我正在尝试使用Node,Express和MySQL在本地开发我的网站。在这样做时,我安装了一个本地MySQL服务器。当我运行本地节点svrApp.js Web服务器然后连接到localhost:3000(使用Chrome版本62.0.3202.94(官方构建)(64位))时,我收到CORS(跨源资源共享)错误。

我已经对CORS进行了大量的研究,我得到了它是什么,它为什么,等等。但我仍然不明白为什么我需要使用它时,我正在做的一切都是本地的。这应该是同一个域,对吗?相同的localhost,相同的端口。我在生产中的相同版本的代码(在世界上)工作正常,没有任何CORS处理。那么,本地发生了什么,以至于我被告知我正在使用跨域?我不相信我需要这样做,但我似乎无法找到触发此CORS错误的问题。

如果我必须在这里使用CORS,那很好,但如果是这样,那么对于我所有的研究,我仍然缺少一些基本因素,因为即使我找到的东西我也无法使它工作

下面的代码是客户端代码,它向服务器发出SQL请求,以呈现一个表,其中包含服务器端生成的select查询的结果。同样,一切都在本地托管。页面,SQL服务器,所有这些。

var ip = "localhost:3000/";

function afterPageLoad(){
var req = new XMLHttpRequest();
var data = {};
req.open("GET", ip+"EAselect", true);
req.withCredentials = true;
req.setRequestHeader("Content-Type", "application/json");
req.addEventListener("load", function(dataResponse, status){
    if(req.status >= 200 && req.status < 400){
        dataResponse =  JSON.parse(req.responseText);
        buildTable(dataResponse);
    }else{
        console.log("Error: " + req.status + ", " + req.statusText);
    }
});
req.send(JSON.stringify(data));
}

下面是服务器上的路由处理程序。我添加了应该允许CORS访问的响应头,但没有快乐。

/* Select Query*/
app.get("/EAselect", function(req,res,next){
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, 
Content-Type, Accept");
pool.query("SELECT * FROM workouts", function(err, rows, fields){
    if(err){
        console.log("query failure. " + err.description);
        next(err);
        return;
    }else{

        res.send(JSON.stringify(rows));
    }
});
});

我希望能够在服务器或客户端上连接到我的本地资源而无需CORS实现,因为一切都是本地的。

我得到的结果是:

Failed to load localhost:3000/EAselect: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

我在这里广泛搜索了与CORS和本地托管服务相关的内容,但没有找到专门解决此问题的内容。

这是我能想到的为相关信息添加的所有内容。如果我错过了需要帮助的东西,请告诉我,我会很乐意编辑。我感谢任何帮助或解释。

1 个答案:

答案 0 :(得分:1)

您可以尝试指定协议:

var ip = "http://localhost:3000/";