web-dev-qa-db-fra.com

SocketIO- GET http: // localhost: 3000/socket.io /? EIO = 3 & transport = polling & t = 1418187395022-0 404 (Introuvable)

J'utilise socketIO avec express. 

Dans mon projet, j'ai une page de connexion et une page d'accueil . Quand je me connecte avec succès, je navigue vers localhost: 3000/home où j'obtiens cette erreur:

GET http://localhost:3000/socket.io/?EIO=3&transport=polling&t=1418187395022-0 404 (Not Found)

Je n'ai apporté aucune modification à mon app.js (projet créé par express).

Index.js:

var express = require('express');
var router = express.Router();
var http = require('http');
var fs = require('fs');
var io = require('socket.io')(http);
/* GET home page. */
router.get('/', function(req, res) {
  res.render('index', { title: 'Express' });
});

router.get('/home', function(req, res) {
  res.render('home', { title: 'Express' });
});

io.on('connection', function(socket){
    console.log("User Connected");
  socket.on('chat message', function(msg){
    io.emit('chat message', msg);
    console.log("Message");
  });
   socket.on('disconnect', function(msg){
    console.log("User DisConnected");
  });

});

router.post('/authenticate', function(req, res) {
    fs.readFile("./public/Verification/Users.json", "utf8", function (err, data) {
        if (err) 
            console.log(err);
        else{
            var result = JSON.parse(data);
            for(var i=0;i<result.Users.length;i++){
                if(req.body.username == result.Users[i].username && req.body.password ==     result.Users[i].password){
                    console.log("Success!!!!!!!!!!!!!!");
                    res.location("home");
                    res.redirect("home");
                }
            }
        }
        });
});

module.exports = router;

Je reçois cette erreur chaque fois que je navigue vers localhost: 3000/home. Je suis nouveau dans les deux formats socketIO et express . S'il vous plaît, dites-moi si quelque chose me manque.

Merci

MODIFIER:

Dans mon layout.jade, j'ai défini socketio comme ceci:

script(src='https://cdn.socket.io/socket.io-1.2.0.js')
35
Zee

Si vous utilisez Express 4, il me semble que vous manquez les lignes de code:

var app = express();
var server = app.listen(3000);

Cela démarrera votre serveur Web et le configurera sur le port 3000. Voir l’application simple et simple Express 4 ici: http://expressjs.com/4x/api.html

Et puis, pour démarrer socket.io, vous ajouteriez:

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

Et, il n'y a pas besoin de cette ligne:

var http = require('http');
55
jfriend00

Depuis que je me bats avec ce problème depuis 5 heures. Et c'est le premier résultat dans google.

Bien sûr, son 2015 et une partie du code a changé.

Je pense qu'actuellement le meilleur début du code index.js est:

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

server.listen(3000);

L'ordre est très important.

Mon problème était que tout était correctement installé et que le nœud écoutait. Cependant, example.com/socket.io/socket.io.js et example.com/socket.io/?eio = ... étaient 404 introuvables . Cependant, lorsque j'ai essayé exemple.com:3000/socket .io/socket.io.js tout a fonctionné. Alors maintenant était la question, comment changer la requête getJSON pour avoir la partie port.

La solution a donc été de modifier le fichier main.js, ajouté au fichier index.html, où votre conversation est . Il y a:

var socket = io();

être remplacé par

var socket = io.connect('http://example.com:3080');

Cela corrige l'URL des requêtes getJSON et ajoute le port correct et non plus 404. J'espère que cela aidera quelqu'un dans le futur.

29
Kalle H. Väravas

Voici comment je le résous côté serveur (2018):  

const app = express();
const socketIO = require('socket.io');

const server = express()
  .use(app)
  .listen(PORT, () => console.log(`Listening Socket on ${ PORT }`));

const io = socketIO(server);

Côté client  

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.1/socket.io.js"></script>

Cela semble facile, mais j'ai passé des heures avant de trouver la solution car les solutions ci-dessus ne fonctionnaient pas pour moi.

2

il suffit d'appeler l'écoute du serveur et, avec le rappel, j'ai transmis l'instance du serveur au module.

partie du fichier bin/www à partir de l'application express

var server = http.createServer(app);
server.listen(port, function () {
  console.log('app listening on *:' + port);
  require('../socket')(server);
  console.log('socket server will be on *:' + port);
});

server.on('error', onError);
server.on('listening', onListening);

et voici comment mon module de socket socket.js

var io = {};

module.exports = (server, serveradmin) => {
  io = require('socket.io')(server);
  io.on('connection', function (socket) {
    console.log(socket + ' a user connected');
  });
}

tous les écouteurs de socket et émet la gestion à partir d'ici.

0
Subhash