我正在树莓派上运行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 未定义。
不确定此时该怎么做。
答案 0 :(得分:0)
初始化服务器套接字时,您可以传递cors
道具。
传入cors
设置为true
的配置对象,例如。 cors: true
或cors: { 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)