我试图在本地开发我的网站使用Node,Express,和MySQL。在此过程中,我安装了一个本地MySQL服务器。当我运行本地节点svrApp.js web服务器,然后连接到localhost:3000 (使用ChromeVersion62.0.3202.94(正式构建)(64位))时,我会得到一个CORS (交叉源资源共享)错误。
我已经对CORS做了大量的研究,我了解它是什么,为什么它是什么,等等。但我仍然不明白的是,为什么我需要使用它,而我所做的一切都是本地的。那应该是同一个领域,对吧?相同的本地主机,同一个端口。我的相同版本的代码在生产中(在世界上)工作良好,没有任何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访问的响应头,但没有joy。
/* 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和本地托管服务有关的内容,但没有发现任何专门针对这个问题的内容。
这是我所能想到的所有相关信息的补充。如果我错过了一些需要帮助的东西,请告诉我,我会很高兴地编辑。我感谢你的任何帮助或解释。
发布于 2017-12-12 08:16:56
您可以尝试指定协议:
var ip = "http://localhost:3000/";https://stackoverflow.com/questions/47767881
复制相似问题