2013-04-09 14 views
6

Ho questo pezzo di codice:richiesta non termina in node.js (lavorava)

var app = require('http').createServer(function(req, res){ 
    console.log(req); 
    req.addListener('end', function() { 
     fileServer.serve(req, res); 

    }); 
}); 

var statics = require('node-static'); 
var fileServer = new statics.Server('./'); 

app.listen(1344, '127.0.0.1'); 

app.on('error', function(err){ 
    console.log(err); 
}) 

Si stava lavorando bene, fino a quando ho fatto un paio di modifiche, il nodo dà un errore, e quando Sono tornato, quell'errore non c'era più, ma invece di lavorare come funzionava prima che l'evento end non venisse attivato. Quindi, qualsiasi cosa all'interno di req.addListener('end', function(){}); non viene chiamata.

E anche se ho eseguito un altro node.js che utilizza lo stesso evento, non è neanche essere licenziato. Quindi è come se l'evento finale della richiesta fosse rotto. Ma come è possibile?

Non è la prima volta che succede. L'ultima volta che ho finito per reinstallare il nodo (dopo aver provato un sacco di cose diverse). Preferirei trovare una soluzione, quindi posso capire il problema!

NOTA: Il codice originale includono socket.io e altri tipi di connessioni, ma ho appena incollato il pezzo di codice sono stati l'applicazione è bloccato su.

Potrebbe anche essere utile sapere come eseguire il debug del problema!

+0

provare con 'nodo v0.8.x' o leggere Stream2 Documenation in http://nodejs.org – InspiredJW

+0

Non posso parlare per se' fileServer.serve' funziona, ma se estrai tutto relativo a 'node-static', il tuo codice funziona così com'è e l'evento' end' è definitivamente chiamato. Ricordo di aver avuto problemi quando abbiamo provato a usare 'node-static' e potresti stare meglio usando il middleware statico di Connect se questo è davvero il tuo problema. http://www.senchalabs.org/connect/static.html –

+0

@InspiredJW Sono su v0.10.3. Stai dicendo che dovrei downgrade? – limoragni

risposta

13

@InspiredJW dovrebbe ottenere credito per la precisazione, dal momento che avevo dimenticato a questo proposito, ma indubbiamente il problema è a causa dei cambiamenti nei flussi leggibili. Affinché l'evento end venga chiamato, è necessario allegare un listener all'evento data oppure chiamare stream.resume().

require('http').createServer(function(req, res){ 
    req.addListener('end', function() { 
     // won't ever get called in node v0.10.3 
    }); 
}); 

require('http').createServer(function(req, res){ 
    req.addListener('end', function() { 
     // will get called in node v0.10.3 because we called req.resume() 
    }); 
    req.resume(); 
}); 

require('http').createServer(function(req, res){ 
    req.on('data', function (chunk) { }); 

    req.addListener('end', function() { 
     // also will get called because we attached a data event listener 
    }); 
}); 

http://nodejs.org/api/stream.html#stream_compatibility

+0

Grande. Funziona ora. Quello che non riesco a capire, è come viene lavorato in primo luogo! Sono nuovo di node.js Devo leggere molto per far funzionare le cose. Conosci un buon libro sul nodo? So che Apress sta lavorando su uno, ma preferirei averne uno subito. Grazie! – limoragni

+0

Io no, mi dispiace. Ho appena imparato il nodo usandolo. Probabilmente ha funzionato prima perché o hai un listener di eventi "dati" allegato, o stavi usando una versione precedente del nodo. –

+0

@limoragni hai probabilmente aggiornato il nodo a v0.10.3 o superiore e questo è ciò che ha causato il suo arresto. – Chev

Problemi correlati