NodeJS 为什么CORS禁用了我的WebSocket连接

xt0899hw  于 11个月前  发布在  Node.js
关注(0)|答案(1)|浏览(99)

我正在开发一个网站,管理员可以通过dashboard.php拉一个新的.JPG到他的网站localhost:8000/index.php。要做到这一点,我使用server.JS与Node.JS:

const app = express();
const corsOptions = {
  origin: 'http://localhost:8000', // Remplacez par le domaine de votre application cliente
  methods: ['GET', 'POST'],
  credentials: true, // Autoriser les cookies et les en-têtes d'autorisation
};
app.use(cors(corsOptions));

const server = http.createServer(app);
const io = socketIO(server);

// Serveur WebSocket
io.on('connection', (socket) => {
  console.log('Un client s\'est connecté');

    // Écoute les changements dans le dossier "Images"
    fs.watch('Images', { recursive: true }, (eventType, filename) => {
        if (eventType === 'change' || eventType === 'rename') {
        // Émet un événement 'imageUpdated' aux clients connectés
        io.emit('imageUpdated', { filename });
        }
    });

  // Gérer la déconnexion du client
  socket.on('disconnect', () => {
    console.log('Un client s\'est déconnecté');
  });
});

// Serveur HTTP pour l'application web
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
  console.log(`Serveur HTTP démarré sur le port ${PORT}`);
});

字符串
我在index.php中介绍了一个脚本,该脚本将WS连接在一起,以自动重新加载页面,即使客户端在管理员拉新图片的同时连接到网站上。

// Connexion WebSocket côté client pour les utilisateurs
    const socket = io('http://localhost:3000'); // Mettez à jour l'URL du serveur WebSocket

    // Écoute des événements 'imageUpdated'
    socket.on('connect', (e) => {
        console.log('connecté' + e);
    });

    socket.on('imageUpdated', (data) => {
        console.log('Image mise à jour:', data.filename);

        // Commentez ou supprimez la ligne suivante pour éviter le rechargement automatique
        // location.reload();
    });


在开发控制台我得到这些错误对.它来每2-3秒,并说这Access to XMLHttpRequest at 'http://localhost:3000/socket.io/?EIO=4&transport=polling&t=OpMMY25' from origin 'http://localhost:8000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.GET http://localhost:3000/socket.io/?EIO=4&transport=polling&t=OpMMncX net::ERR_FAILED 200 (OK)
感谢大家阅读本文
尝试使CORS选项。尝试检查WS是否连接,但没有

u7up0aaq

u7up0aaq1#

感谢@devhubmarius,他找到了解决方案:
问题是,cors在需要的地方作为中间件,比如:

const app = express();
app.use(cors());

const server = http.createServer(app);
const io = socketIO(server, {cors: {origin: 'http://localhost:8000',   methods: ['GET', 'POST'],   credentials: true}});

字符串
头响应:https://imgur.com/a/XuubnTc
所以它工作得很好,谢谢!

相关问题