Socket.io - Problème de CORS

Ce sujet est résolu
44803
,

Bonjour,

J'ai un problème de communication avec les sockets entre mon navigateur et mon serveur Node.JS:

Je voudrais que lorsque j'appuis sur un bouton, un évenement lié à ma socket se produise mais j'ai une erreur de ce type:

Blocage d'une requête multi-origines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http://192.168.1.92:8080/socket.io/?EIO=3&transport=polling&t=1445280584218-4. Raison : échec de la requête CORS

Voici mon code coté client:

$(document).ready(function() {

    var IP = '192.168.1.92';

    var socket = io('http://' + IP + ':8080');
    console.log('Connecté à ' + IP);


    //_A l'appui sur "Envoyer", on envoie le message
    $('#btn-send').click(function () {
        console.log('Clik !');

        var author = $('#author').val();
        var message = $('#message').val();
        var date = new Date();

        if(author !== undefined && message !== undefined) {
            socket.emit('sendMessage', {author: author,
                                        message: message,
                                        date: date
                                        });
        }
    });
});

Du coté serveur:

var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io')(server);

app.listen(8080);
//[...]

//_Connexion du client au site, création de la socket
    io.on('connection', function(socket) {
        console.log('Nouvel utilisateur connecté ... ');

        //_On envoie a l'utilisateur qu'il est connecté
        socket.emit('connexionState', {state: true});

        //_Quand un utilisateur écrit un message, on le met dans la DB, et on l'affiche
        socket.on('sendMessage', function (data) {
            conssole.log('IO : Event - sendMessage');
            //_EQUIVALENT au POST /new/message
            var newMessage = new Message({
                author: data.author,
                message: data.message,
                heure: data.heure
            });

            newMessage.save(function (err, resObj) {
                if(err) {
                    console.error(err);
                    res.sendStatus(500);
                    return(500);
                } else {
                    console.log('Added a new message in the DB.');
                    res.sendStatus(200);
                    return(200);
                }
            });

            //_On renvoie le message à tout le monde !
            io.emit('new-message', {author: data.author, 
                                    message: data.message,
                                    heure: data.heure
                                    });
        });
    });

Je suis tombé sur pas mal de sujets qui traitait la question mais je n'ai pas trouvé de solution.

Pouvez vous m'aidez ou me mettre sur la voie SVP ?

Merci

3 Réponse

44803
,

Problème résolu en ayant coté serveur:

var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);

server.listen(8080);

Et ne pas mettre:

app.listen(8080);
44835
,

As-tu essayé de configurer CORS côté serveur ?

var io = require('socket.io')(server, {origins:'mydomain.com:* http://mydomain.com:* http://www.mydomain.com:*'});

de la lecture ici

Il semble important de récupérer le script client sur le même serveur

<script src="http://192.168.1.92/vendor/socket.io.js" ></script>
44803
,

Bonjour,

J'ai essayé de faire ceci:

Serveur:

var io = require('socket.io')(server, {origins:'*:*'});

Client: le fichier est bien chargé

<script src="socket.io.js"></script>

J'ai toujours les même erreursn mais j'ai remarqué que lorsque je fait un :

var socket = io('http://localhost:8080');

pour remplacer:

var socket = io('http://192.168.1.92:8080');

Le message: Blocage d'une requête multi-origines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http://192.168.1.92:8080/socket.io/?EIO=3&transport=polling&t=1445280584218-4. Raison : échec de la requête CORS n'est plus présent et je n'ai plus que l'erreur:

GET XHR http://localhost:8080/socket.io/ [HTTP/1.1 404 Not Found 1ms]