使用socket.io node.js努力应对CORS策略

问题描述

我发现了很多有关CORS政策问题的信息,但是即使尝试了在此找到的每个解决方案,也没有任何效果

我最后一次尝试是在nodejs服务器中进行的>

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

var spawn = require('child_process').spawn;
var fs = require('fs');

app.use(express.static('public'));

const server = require('https').createServer({
    key: fs.readFileSync('/home/example/ssl/keys/c231f_0ca89_7b80bf6d84934d212df326eee9c6319f.key'),cert: fs.readFileSync('/home/example/ssl/certs/streaming_desytec_com_c231f_0ca89_1609334228_a73b63988075270c9f680f383b6e6a99.crt')
},app);

var io = require('socket.io')(server);
io.set('origins','https://localhost:44356');

尽管我努力解决这个问题,但我总是在socket.io客户端中遇到此错误

Access to XMLHttpRequest at 'https://streaming.example.com/socket.io/?framespersecond=15&audioBitrate=22050&EIO=3&transport=polling&t=NJbfyAD' from origin 'https://localhost:44356' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我该如何解决呢?

我的网站位于localhost中,而nodejs服务器正在linux服务器上远程运行。

编辑:我最后一次尝试:

var cors = require('cors')

var corsOptions = {
  origin: 'https://localhost:44356',optionsSuccessstatus: 200 // some legacy browsers (IE11,varIoUs SmartTVs) choke on 204
}

app.use(cors());
app.get('/socket.io/',cors(corsOptions),function (req,res,next) {
  res.json({msg: 'This is CORS-enabled for all origins!'})
})

app.use(express.static('public'));

它仍然不起作用。考虑到服务器的URL为:

,我想知道我写的app.get调用是否正确。

/socket.io/?framespersecond=15&audioBitrate=22050&EIO=3&transport=polling&t=NJbfyAD

解决方法

yourapp.use(
  cors({
    origin: (origin,callback) => callback(null,true),credentials: true // if using cookies
  })
);

您可以根据自己的环境进行控制。