socket.io:跨域请求在Firefox上被阻止

时间:2020-11-07 03:58:03

标签: node.js firefox socket.io cross-domain

我正在树莓派上运行nodejs socket.io服务器,并在Firefox上运行socket.io Web客户端。

但是Firefox一直向我发送跨域请求被阻止(相同原始策略错误)。

    // nodeJS Server:
    var app = require('express')();
    var cors = require('cors');
    app.use(cors({origin: '*:*'}));
    var server = require('http').Server(app);
    var io = require('socket.io')(server);
    server.listen(3000);

    io.on('connection', function(socket) {
        socket.emit('announcements', { message: 'A new user jas joined!' });
    });
    

    //JS Browser client:
    const socket = io('ws://<INSERT_MY_EXTERNAL_IP>:3000');

    socket.on('connect', () => {
      socket.send('Hello!');
    });

我也尝试过:io.origins(...),io.set(“ origin”,...),但是那些人一直在说函数 origins set 未定义。

不确定此时该怎么做。

1 个答案:

答案 0 :(得分:0)

初始化服务器套接字时,您可以传递cors道具。

传入cors设置为true的配置对象,例如。 cors: truecors: { origin: '*' }

详细了解该here

实际应用中(仅在LAN中测试):

client.js

const socket = io('ws://localhost:3000');
socket.on('testing', res => { console.log(res) });

server.js

const app = require('express')()
const server = require('http').createServer(app)

const opts = { cors: { origin: '*' } }
const io = require('socket.io')(server, opts)

const cors = require('cors')
app.use(cors())

io.on('connection', (socket) => {
  console.log(`Client connected (id=${socket.id})`)

  socket.emit('testing', 123)

  socket.on('disconnect', () => {
    console.log(`Client disconnected (id=${socket.id})`)
  })
});

(
  port => server.listen(
    port, 
    () => console.log(`Express server running on port ${port}`)
  )
)(3000)