2014-12-10 14 views
33

Sto utilizzando socketIO con express.SocketIO- GET http: // localhost: 3000/socket.io /? EIO = 3 & transport = polling & t = 1418187395022-0 404 (non trovato)

Nel mio progetto ho una pagina di accesso e una home page. Quando faccio login riuscito a navigare a localhost: 3000/casa dove ottengo questo errore:

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

non ho fatto alcuna modifica nei miei app.js (progetto creato da espresso).

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; 

ottengo questo errore ogni volta che ci si dirige verso localhost: 3000/home. Sono nuovo sia per socketIO che per express. Per favore dimmi se mi manca qualcosa.

Grazie

EDIT:

Nel mio layout.jade i definita socketio come questo:

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

Dove è configurato il server express per l'ascolto sulla porta 3000? Non vedo quella parte da nessuna parte? E, dovrebbe essere necessario prima di collegare io lato server. – jfriend00

+0

Per impostazione predefinita è in ascolto di 3000. Non ho configurato nulla. – Zee

+0

Non ci sono impostazioni predefinite sulla porta 3000 di cui sono a conoscenza. Se localhost: 3000/home genera un errore, allora il tuo server web non funziona correttamente sulla porta 3000. Quale versione di Express stai usando? – jfriend00

risposta

45

Se si sta eseguendo Express 4, mi pare come te' Mi mancano le righe di codice:

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

che inizierà il server web e impostarlo alla porta 3000. Vedere l'osso semplice Express 4 applicazione qui: http://expressjs.com/4x/api.html

E, poi per avviare socket.io, si dovrebbe aggiungere:

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

E , non è necessario per questa riga:

var http = require('http'); 
+1

Sì, sto usando express 4. Ho inserito questo codice in app.js e mi sta dando l'errore "EADDRINUSE". – Zee

+0

Sì, funziona !! Per errore ho aggiunto lo stesso codice in index.js, e questo è dove stava dando un errore. Grazie. – Zee

+0

Grazie, mi ha salvato la giornata –

25

Poiché stavo combattendo con questo problema nelle ultime 5 ore. E questo è il primo risultato in google.

Ovviamente il suo 2015 e parte del codice è cambiato.

penso che attualmente il miglior inizio del codice index.js è:

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'ordine è molto importante.

Il mio problema era che tutto era installato correttamente e il nodo era in ascolto. Tuttavia, example.com/socket.io/socket.io.js e example.com/socket.io/?eio = ... non sono stati trovati 404. Tuttavia, quando ho provato example.com:3000/socket.io/socket.io.js tutto ha funzionato. Quindi ora era la domanda, come cambiare la query getJSON per avere la parte di porta.

Quindi la soluzione era modificare il file main.js, che viene aggiunto all'indice.html, dove si trova la tua chat. c'è:

var socket = io(); 

da sostituire con

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

Questo corregge la getJSON interroga URL e aggiunge la porta corretta e non più 404. Spero che aiuta qualcuno in futuro.

+2

La soluzione selezionata non ha funzionato ma questo ha fatto :) Grazie :) –

+0

Aggiungerò anche una nota qui di un problema, che tutti iniziano con queste prese. Che quei nodi non rimangono vivi. Quando chiudi la tua console, moriranno. Per questo devi installare un addon, che manterrà i nodi vivi. Sfortunatamente non ricordo più, ma penso che sia stato elephant.io. Tuttavia hai bisogno di qualcosa in più per mantenere vivo il nodo. –

+0

Ho provato a vedere il nginx conf e ho aggiunto la seguente riga: – undefined

Problemi correlati