Javascript 不管我怎么做,我都不能让CORS工作
由于评论中的怪异,问题得以解决。我的端点使用的是localhost:3030,而不是http://localhost:3030 Node在端口3030上运行,而ionic在端口8100上的serve中运行,因此localhost:3030和localhost:8100我知道这是问题所在,并已寻找所有实现和允许CORS的方法 从安装和使用cors中间件到遵循实现cors的其他指南,我已经尝试了一切。在下面的代码中,我尝试按照一个指南来创建一个自定义中间件,但即使这样也不起作用 Side note socket.io工作正常Javascript 不管我怎么做,我都不能让CORS工作,javascript,node.js,express,Javascript,Node.js,Express,由于评论中的怪异,问题得以解决。我的端点使用的是localhost:3030,而不是http://localhost:3030 Node在端口3030上运行,而ionic在端口8100上的serve中运行,因此localhost:3030和localhost:8100我知道这是问题所在,并已寻找所有实现和允许CORS的方法 从安装和使用cors中间件到遵循实现cors的其他指南,我已经尝试了一切。在下面的代码中,我尝试按照一个指南来创建一个自定义中间件,但即使这样也不起作用 Side note
app.use(bodyParser.urlencoded({'extended':'true'}));
app.use(bodyParser.json({ limit: '5mb' }));
// enable CORS
app.use(function( req, res, next ) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "x-requested-with, content-type");
res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS");
res.header("Access-Control-Allow-Credentials", "true");
res.header("Access-Control-Max-Age", "1000000000");
if ('OPTIONS' == req.method) { res.send(200); } else { next(); }
});
io.on('connection', (socket) => {
socketIo.process(socket, io);
});
app.post('*', (req, res) => {
post.process(req, res);
});
http.listen(port, function(){
console.log('Listening on Port: ' + port);
});
我在尝试发布时遇到的错误
Access to XMLHttpRequest at 'localhost:3030/api/signin' from origin 'http://localhost:8100' has been blocked by CORS policy:
Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
我对express和reactJs应用程序也有同样的问题。为了解决这个问题,我添加了库
express上的cors示例:
const cors = require("cors");
const app = express();
app.use(
cors({
allowedHeaders: ["authorization", "Content-Type"], // you can change the headers
exposedHeaders: ["authorization"], // you can change the headers
origin: "*",
methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
preflightContinue: false
});
);
我对express和reactJs应用程序也有同样的问题。为了解决这个问题,我添加了库
express上的cors示例:
const cors = require("cors");
const app = express();
app.use(
cors({
allowedHeaders: ["authorization", "Content-Type"], // you can change the headers
exposedHeaders: ["authorization"], // you can change the headers
origin: "*",
methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
preflightContinue: false
});
);
Chrome不支持访问控制下的localhost允许源代码:'*' 访问控制允许源:*与本地主机不匹配
试试看,127.0.0.1而不是localhost,Chrome不支持访问控制下的localhost允许源代码:'*' 访问控制允许源:*与本地主机不匹配
试试127.0.0.1而不是localhost这是什么:http.listen?是不是应该是app.list我不确定这两种方法是否有区别,我两种方法都没有问题。在我发布此消息之前,它是app.listen,但我尝试了http.listen尝试并使cors工作您的请求似乎是针对localhost:3030的,但错误消息表明它需要http-您尝试过吗http://localhost:3030/?Isn“难道错误是不言自明的吗?您正在使用localhost:3030/…,您应该使用http://localhost:3030/... 或https。这个特殊的错误是由客户端引起的。哇@freakish你完全正确,这正是问题所在,将http://添加到我的端点前端修复了向我的服务器发送帖子的所有问题。不知道我是怎么错过的这是什么:http.listen?是不是应该是app.list我不确定这两种方法是否有区别,我两种方法都没有问题。在我发布此消息之前,它是app.listen,但我尝试了http.listen尝试并使cors工作您的请求似乎是针对localhost:3030的,但错误消息表明它需要http-您尝试过吗http://localhost:3030/?Isn“难道错误是不言自明的吗?您正在使用localhost:3030/…,您应该使用http://localhost:3030/... 或https。这个特殊的错误是由客户端引起的。哇@freakish你完全正确,这正是问题所在,将http://添加到我的端点前端修复了向我的服务器发送帖子的所有问题。不知道我是怎么错过的,非常感谢你的帮助!我很高兴我帮了忙。您可以将答案标记为正确,并帮助其他面临相同问题的开发人员,而不是将标题更改为“已解决”。我会这样做,但没有人回答解决方案是什么。我确实有一秒钟把你的答案标记为解决方案,但意识到它不是完整的解决方案,不幸的是,它需要一个更简单的解决方案,因此我把它放在了问题中。如果你想编辑你的答案,也包括说的解决方案,我会非常乐意标记你的答案。好的,现在我看到了评论。公平地说,我从来没有在localhost中使用过http,因为浏览器从URL中删除http是没有用的。你没有错,我想这就是为什么我这么长时间没有看到这个细节。非常感谢你的帮助!我很高兴我帮了忙。您可以将答案标记为正确,并帮助其他面临相同问题的开发人员,而不是将标题更改为“已解决”。我会这样做,但没有人回答解决方案是什么。我确实有一秒钟把你的答案标记为解决方案,但意识到它不是完整的解决方案,不幸的是,它需要一个更简单的解决方案,因此我把它放在了问题中。如果你想编辑你的答案,也包括说的解决方案,我会非常乐意标记你的答案。好的,现在我看到了评论。公平地说,我从来没有在localhost中使用过http,因为它是无用的,因为浏览器从URL中删除了http。你没有错,我想这就是为什么我这么长时间都忽略了这个细节。