2012-04-17 7 views
11

Ho un problema con gli esempi di socket.io. Il mio browser non può ottenere il file socket.io.js (errore 404 nella console).Il browser non può ottenere il file socket.io.js utilizzando express


codice che funziona:

server.js

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

app.listen(80); 

app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

index.html

<script src="http://192.168.1.104:81/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://192.168.1.104:81'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 


Ma questo non uno:

01.235.

server.js

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

app.listen(80); 

app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

index.html

<script src="http://192.168.1.104:80/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://192.168.1.104:80'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

In questo caso il mio browser non è possibile ottenere il file socket.io.js.

risposta

7

MODIFICA: tutto il testo riportato di seguito è errato fino al successivo "MODIFICA". Lasciando lì come una traccia ...

c'è una cosa che si dovrebbe sapere, due cose che dovreste fare + tutti i necessari Express doc is here:

  1. filtro espresso/gestire ogni accesso al server del nodo. Significa che quando stai provando ad accedere al tuo file di script socket.io, Express prova a trovarlo nelle rotte dichiarate e fallisce come non lo avevi fatto (e avevi ragione a non farlo).
  2. più importante: dichiarare una non cartella di statica, "computerizzata" in esprimere dove potrete inserire tutti i file statici (CSS, script client, immagini):

    app.use('/static', express.static(__dirname + '/static'));

    Questa linea deve essere messo in voi app.configure chiamata, prima di app.use(app.router) (in realtà l'ho messo prima)

    Mi piace avere questo/statico/script;/static/css;/static/img folder organization ma sei libero di adattarti alle tue esigenze.

  3. cambiare il collegamento al file di script socket.io ad un percorso relativo (facoltativo ma fortemente consigliato): src='/static/scripts/socket.io/socket.io.js'

EDIT: mi sbaglio, molto molto sbagliato e mi dispiace per quello. Socket.io genera i diversi percorsi/file necessari e non è necessario dichiararli né copiare alcun file di script del client.

Si prega di provare a passare la linea client <script src="http://192.168.1.104:81/socket.io/socket.io.js"></script> a quella relativa normale <script src="/socket.io/socket.io.js"></script> perché è l'unica differenza tra il codice e il codice guida espresso.

+0

Ok, ora browser può ottenere socket.io.js, ma ci è prossimo errore, riga "var client = require ('socket.io-client');" in socket.io.js: Uncaught ReferenceError: require non è definito. –

+1

Ho sbagliato, mi dispiace per il fuorviante. Ho aggiornato la mia risposta. –

+0

Ancora non funziona, quando aggiungo

6

Cosa versione Express stai usando?

L'API è cambiato da espresso 2.xa 3.x, quindi la risposta è nella compatibilità sezione Socket.IO al Migrating from 2.x to 3.x wiki:

metodo di Socket.IO .listen() accetta un'istanza http.Server come argomento.
A partire da 3.x, il valore di ritorno di express() non è un'istanza http.Server. Per ottenere Socket.IO lavorare con espresso 3.x, assicurarsi che si crea manualmente e passare l'istanza http.Server a .listen() il metodo di Socket.IO:

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

server.listen(3000); 
Problemi correlati