Meteor 和 Socket IO - 不存在 'Access-Control-Allow-Origin' header
Meteor and Socket IO - No 'Access-Control-Allow-Origin' header is present
我正在尝试将客户端连接到服务器套接字,但出现此错误。
Access to fetch at 'http://localhost:9999/socket.io/?EIO=4&transport=polling&t=NTQGzyP&b64=1' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
我查看了类似问题的答案并尝试过,没有任何变化。这包括使用 WebApp.rawConnectHandlers
设置 headers 以及将 cors 选项设置为无效。我花了很多时间复制其他人提到的不同解决方案,但似乎并没有什么不同。
我试过在创建服务器之前和之后添加 headers。
客户端
const io = require("socket.io-client")
const socket = io.connect("http://localhost:9999/")
服务器
import {Meteor} from 'meteor/meteor';
import http, * as Http from 'http';
import {Socket} from 'socket.io';
import {WebApp} from "meteor/webapp";
Meteor.startup(() => {
// Server
const server: Http.Server = http.createServer();
WebApp.rawConnectHandlers.use(function (req, res, next) {
res.setHeader("Access-Control-Allow-Origin", "*");
return next();
});
const io = require('socket.io')(server);
io.on('connection', (socket: Socket)=>{
socket.on('hello',(data)=>{
console.log('HELLO BISH')
console.log(data.text)
})
})
// Start server
try {
server.listen(9999);
} catch (e) {
console.error(e);
}
});
允许连接的正确方法是什么?
为了解决这个问题,我必须为套接字设置 cors 配置。我允许 http://localhost:3000
连接到它,现在允许我的网页与套接字服务器通信。
const io = require("socket.io")(server, {
cors: {
origin: "http://localhost:3000",
methods: ["GET", "POST"]
}
});
我正在尝试将客户端连接到服务器套接字,但出现此错误。
Access to fetch at 'http://localhost:9999/socket.io/?EIO=4&transport=polling&t=NTQGzyP&b64=1' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
我查看了类似问题的答案并尝试过,没有任何变化。这包括使用 WebApp.rawConnectHandlers
设置 headers 以及将 cors 选项设置为无效。我花了很多时间复制其他人提到的不同解决方案,但似乎并没有什么不同。
我试过在创建服务器之前和之后添加 headers。
客户端
const io = require("socket.io-client")
const socket = io.connect("http://localhost:9999/")
服务器
import {Meteor} from 'meteor/meteor';
import http, * as Http from 'http';
import {Socket} from 'socket.io';
import {WebApp} from "meteor/webapp";
Meteor.startup(() => {
// Server
const server: Http.Server = http.createServer();
WebApp.rawConnectHandlers.use(function (req, res, next) {
res.setHeader("Access-Control-Allow-Origin", "*");
return next();
});
const io = require('socket.io')(server);
io.on('connection', (socket: Socket)=>{
socket.on('hello',(data)=>{
console.log('HELLO BISH')
console.log(data.text)
})
})
// Start server
try {
server.listen(9999);
} catch (e) {
console.error(e);
}
});
允许连接的正确方法是什么?
为了解决这个问题,我必须为套接字设置 cors 配置。我允许 http://localhost:3000
连接到它,现在允许我的网页与套接字服务器通信。
const io = require("socket.io")(server, {
cors: {
origin: "http://localhost:3000",
methods: ["GET", "POST"]
}
});