2012-04-19 2 views
8

Ho il seguente server.js esecuzione:node.js: socket.io vs express.static

module.exports = server; 

var express = require('express'); 
var fs = require('fs'); 

var server = express.createServer();  

var port = 58000; 
server.listen(port); 

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

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

server.use(express.logger()); 

io.on('connection', function(client){ 
    console.log('new client connected ' + client); 
    client.on('message', function(){ 
     console.log('client wants something'); 
    }); 
}); 

semplice server express.static per i file in una sottocartella/pubblico, più socket.io funzionalità. Con questa configurazione, ogni richiesta per il file 'socket.io.js' fallisce, cioè

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

restituisce un errore 404 (file non trovato). Il file server statico funziona correttamente. Se uso semplicemente il modulo 'http' invece di 'esprimere' (commentando le righe express.static ed express.logger), socket.io.js viene pubblicato correttamente. Come posso combinare entrambe le funzionalità?

risposta

0

Assicurarsi di disporre delle ultime versioni di express.js e di socket.io.js. Il mio lato si sta lavorando con grande

[email protected] 
[email protected] 
[email protected] 

In caso contrario, una soluzione può essere quella di chiamare var io = require('socket.io').listen(server); dopo la vostra server.use

+0

[email protected] potrebbe non essere stata una buona idea ... ora di lavoro – daaanipm

+0

Oh, infatti, c'è un po 'grossi problemi con Express @ 3 per il momento, soprattutto sul router e middleware, hanno ci stiamo lavorando. Dovresti limitarti alla versione stabile (corrente è @ 2.5.9), se non hai intenzione di fork express.js – Tronix117

3

espresso 3.0.0 (lastest) cambiare le sue API.

Here è una domanda molto simile alla tua che offre la risposta.

var express = require('express') 
    , http = require('http'); 

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

... 

server.listen(8000);