socket.io.js introuvable sur le client

Cette question a déjà été posée mais n’a pas trouvé de solution dans les réponses précédentes.

Socket.IO me donne deux problèmes:

  1. Le côté serveur a donné cette erreur – ERREUR – écouter EACESS J’ai lu stackoverflow et résolu ce problème en lançant une commande sudo pour démarrer le serveur.
  2. maintenant clientside ne semble pas trouver le fichier socket.io.js selon la ligne de script –

Je comprends que le fichier n’est pas trouvé à l’aide de la console des outils de développement Chrome, qui contient une erreur 404.

J’ai lu que ce fichier est créé à la volée par serveur. Mais j’ai fait un “ls-a” sur le dossier racine. Impossible de trouver le fichier socket.io/socket.io.js.

Des idées?

Pour référence, voici mon code serveur –

var http = require('http'), path = require("path"), url = require("url"), fs = require("fs"), mime = require("mime"), io = require("socket.io").listen(server); var homepath = "."; var server = http.createServer(function (req, res) { var uri = url.parse(req.url).pathname; var filepath = path.join(homepath, uri); console.log(filepath); path.exists(filepath, function (exists) { if (!exists) { //404 response res.writeHead(404, { "Content-Type": "text/plain" }); res.write("404 File not Found \n"); res.end(); } else { if (fs.statSync(filepath).isDirectory()) { filepath += '/index.html'; filepath = path.normalize(filepath); } fs.readFile(filepath, "binary", function (err, data) { if (err) { res.writeHead(500, { 'Content-Type': 'text/plain' }); res.write('500 File read error \n'); res.end(); } else { var contentType = mime.lookup(filepath); res.writeHead(200, { 'Content-Type': contentType }); res.write(data, 'binary'); res.end(); } }); } }); //sockets part starts here io.sockets.on('connection', function (socket) { socket.on('test', function (data) { console.log('i got something'); console.log(data.print); }); }); }); server.listen(3000); server.on('error', function (e) { console.log(e); }); console.log('Server listening on Port 3000'); 

Le problème ici est que vous dites à Socket.IO d’écouter sur un serveur qui n’existe pas encore, ce qui provoque un EACCES et ne sert donc pas le fichier client. Voici ce que vous faites:

 // the HTTP server doesn't exist yet var io = require('socket.io').listen(server); var server = http.createServer(); 

Et si vous voyez dans votre console d’erreur côté serveur, vous obtenez ceci:

 info: socket.io started warn: error raised: Error: listen EACCES 

Pour résoudre ce problème, déplacez votre fonction d’écoute après la création du serveur:

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

Une fois que Socket.IO a bien écouté, il servira automatiquement le fichier client à /socket.io/socket.io.js . Vous n’avez pas besoin de le trouver ou de le servir manuellement.

Le fichier client dont vous avez besoin se trouve dans le dossier node_modules ici:

 node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js 

Socket.io devrait cependant servir ce fichier afin que vous n’ayez pas besoin de le copier ailleurs. Par exemple, si vous exécutez votre serveur socket.io sur:

 http://localhost:5000 

Ensuite, le script sera servi à partir de:

 http://localhost:5000/socket.io/socket.io.js 

Si vous utilisez socket.io depuis une autre application ou un autre port, l’URL relative de votre exemple de code ne fonctionnera pas. Vous voudrez peut-être inclure le script client manuellement ou essayer d’inclure le module de nœud client (s’il est utilisé par l’application de nœud).

Vous pouvez consulter le référentiel client ici pour plus d’informations: https://github.com/LearnBoost/socket.io-client