Socket.IO跨域问题

im9ewurl  于 2022-10-12  发布在  Node.js
关注(0)|答案(3)|浏览(297)

我有一个工作在Apache服务器上的前端angularJS应用程序(客户端),它的API调用被发送到在NodeJS中运行的后端应用程序(服务器)。现在,我希望在客户端和服务器之间建立套接字连接。我正在使用CORS NPM模块跨域问题,但它不工作。

关于这一点,我看到了几种解决方案,但没有一个对我有效。

以下是我的服务器端代码:

var cors = require('cors')
var app = express();
var http = require('http');

app.use(cors({
origin: true,
credentials: true
}));

var server = http.createServer(app);
var io = require('socket.io')(server);
io.on('connection', function(socket) 
{
console.log(":::::::::::::::::::::SOCKET:::::::::::::::::::::")

socket.on('message', function(data) {
    console.log(data); })
});

服务器在http://localhost:8000/运行

以下是我的客户端代码:

function socket() {
        var socket = io.connect('http://localhost:8000/');
  return {
     on: function(eventName, callback) {
        socket.on(eventName, callback);
     },
     emit: function(eventName, data) {
        socket.emit(eventName, data);
     },
     getSocket: function() {
        return socket;
     },
     removeAllListeners: function() {
        socket.removeAllListeners();
     }
  };
  }

我在angularJS中创建了上述工厂,并在函数内部调用它,如下所示:

var socket=PermitFactory.socket();
socket.emit('message', 'ssss');

我在浏览器控制台中收到的错误是:

Socket-io.js:4948获取http://localhost:8000/socket.io/?EIO=3&transport=polling&t=LhvWuIr 404(未找到)

在服务器控制台中:

GET/Socket.IO/?EIO=3&TRANSPORT=轮询&t=LhvUygM 404 18.881 ms-1153

请帮帮我!

olqngx59

olqngx591#

您得到的是404 (Not Found),这意味着问题出在您的URL而不是CORS中。

http://localhost:8000/服务器启动了吗??套接字服务器..如果是,则在wss://localhost:8000/wss://localhost:8000/之前执行wssws

rt4zxlrg

rt4zxlrg2#

服务器端脚本上允许跨域,将其放在app.js上

//Access-Control-Allow-Origin
app.use(function(req,res,next){
    res.header('Access-Control-Allow-Origin', '*');
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
    res.header("Access-Control-Allow-Credentials",true);
    res.header("Access-Control-Allow-Methods","POST,GET,OPTIONS");
    next();
});

app.use(cors());

支持CROS原点的Google Chrome插件

https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en

u7up0aaq

u7up0aaq3#

在您的客户端尝试这种方法,这将会起作用。

var socket = io('https://localhost:8000/', { transports: ['websocket'] });

相关问题