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
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);
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>
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]