2012-05-29 6 views
6

Das Problem: Wenn ich die Express ['statische'] Zeile auskommentieren, läuft der Code einwandfrei. Wenn ich es einfüge (oder die Reihenfolge ändere), bleibt die App eine Weile stehen, bevor sie antwortet.nodejs hängt mit statischen Expressdateien

nachzubilden: Führen Sie die App, einen Browser laden und ständig die Seite zu 127.0.0.1:51783 Aktualisieren gehen (oder verwenden Sie curl), wird die Konsole Sie eine Ausgabe ähnlich geben:

GET/1 ms 

Dann, wenn die Timeout-Kicks in und die 15-Anfragen gesendet werden, wird der Server nicht mehr reagiert und Sie erhalten die folgenden:

Server Now Unresponsive but requests queued 
GET/35549 ms 

app.js

var http = require('http'); 
var express = require('express'); 
var app = express.createServer(); 
app.use(express.logger({ format: '\x1b[1m:method\x1b[0m \x1b[33m:url\x1b[0m :response-time ms' })); 
app.use(express.bodyParser()); 
app.use(express['static'](__dirname + '/')); //Comment me and all works perfectly! 
app.listen(51783); 
http.globalAgent.maxSockets = 500; //doesn't help 
setTimeout(function(){ 
    console.log('Server Now Unresponsive but requests queued'); 
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15].forEach(function(item){ 
    http.request({host:'http://cnn.com', port:80, path:'/null', method:'GET'}, function(res){ 
    }).on('error', function(e){}); 
    }); 

},5000); 
+0

Ich habe genau das gleiche Problem. Ich nahm an, dass es von einem anderen Teil der Middleware kam, habe es aber jetzt isoliert, um es zu verbinden. Hast du Glück, das am Ende Chillbo zu lösen? –

+0

Wir haben dieses Problem auch. –

Antwort

-2

Es ist etwas nicht ganz richtig über die HTTP-Anfrage. Ich empfehle das Modul request für diese Art von Sache. So oder so funktioniert das:

var http = require('http'); 
var express = require('express'); 
var app = express.createServer(); 

app.configure(function(){ 
    app.use(express.logger({ format: '\x1b[1m:method\x1b[0m \x1b[33m:url\x1b[0m :response-time ms' })); 
    app.use(express.bodyParser()); 
    app.use(express['static'](__dirname + '/public')); //Comment me and all works perfectly! 
}) 

app.listen(51783); 
var request = require('request'); 


setTimeout(function(){ 
    console.log('Server Now Unresponsive but requests queued'); 
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15].forEach(function(item){ 
    request('http://www.google.com', function (error, response, body) { 
     console.log("request number "+item+" received") 
    }) 
    }); 
},5000); 
+0

Diese Antwort reagiert nicht auf das Problem. –

+1

Es tut irgendwie. Ich kam hierher, weil ich ein Problem mit express.static, http-proxy und http.request hatte. Durch den Wechsel von http.request zur Anforderungsbibliothek wurde das Problem behoben. – sheldonh