纯本地开发环境抛CORS错误
Pure local development environment throwing CORS error
我正在尝试使用 Node、Express 和 MySQL 在本地开发我的网站。为此,我安装了一个本地 MySQL 服务器。当我 运行 我的本地节点 svrApp.js 网络服务器然后连接到 localhost:3000 (使用 Chrome 版本 62.0.3202.94(官方构建)(64 位)),我得到CORS(跨源资源共享)错误。
我对 CORS 进行了大量研究,我了解它是什么,为什么会这样等等。但我仍然不明白的是,当我所做的一切都是当地的。那应该都是同一个域,对吧?相同的本地主机,相同的端口。我在生产环境中(在世界之外)的相同版本代码在没有任何 CORS 处理的情况下工作正常。那么,本地发生了什么,以至于我被告知我正在使用跨域?我不相信我需要这样做,但我似乎无法找到触发此 CORS 错误的问题。
如果我必须在这里使用 CORS,那很好,但如果是这样,那么对于我的所有研究,我仍然缺少一些基本的东西,因为即使使用我的东西我也无法让它工作'找到了。
下面的代码是客户端代码向服务器发出 SQL 请求以呈现 table 以及服务器端生成的 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 访问的响应 headers,但没有任何乐趣。
/* 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 和本地托管服务相关的内容,但没有找到专门解决此问题的内容。
能想到的就这些了,补充一下相关信息。如果我遗漏了需要帮助的内容,请告诉我,我会很乐意进行编辑。感谢任何帮助或解释。
您可以尝试指定协议:
var ip = "http://localhost:3000/";
我正在尝试使用 Node、Express 和 MySQL 在本地开发我的网站。为此,我安装了一个本地 MySQL 服务器。当我 运行 我的本地节点 svrApp.js 网络服务器然后连接到 localhost:3000 (使用 Chrome 版本 62.0.3202.94(官方构建)(64 位)),我得到CORS(跨源资源共享)错误。
我对 CORS 进行了大量研究,我了解它是什么,为什么会这样等等。但我仍然不明白的是,当我所做的一切都是当地的。那应该都是同一个域,对吧?相同的本地主机,相同的端口。我在生产环境中(在世界之外)的相同版本代码在没有任何 CORS 处理的情况下工作正常。那么,本地发生了什么,以至于我被告知我正在使用跨域?我不相信我需要这样做,但我似乎无法找到触发此 CORS 错误的问题。
如果我必须在这里使用 CORS,那很好,但如果是这样,那么对于我的所有研究,我仍然缺少一些基本的东西,因为即使使用我的东西我也无法让它工作'找到了。
下面的代码是客户端代码向服务器发出 SQL 请求以呈现 table 以及服务器端生成的 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 访问的响应 headers,但没有任何乐趣。
/* 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 和本地托管服务相关的内容,但没有找到专门解决此问题的内容。
能想到的就这些了,补充一下相关信息。如果我遗漏了需要帮助的内容,请告诉我,我会很乐意进行编辑。感谢任何帮助或解释。
您可以尝试指定协议:
var ip = "http://localhost:3000/";