Beste Weg, um debug 'Kann nicht gesetzt-Header, nachdem Sie gesendet werden' Fehler in Express / Node.js?

Ich versuche zu Debuggen, die gefürchtete Can't set headers after they are sent Fehler in einem node.js Express-Anwendung. Insbesondere bin ich mit der knox Bibliothek zu reden s3.

Etwa, ich habe diese Express-handler, mit einer globalen Instanz einer knox s3client:

function foo(req, res) {
    //Region A
    var s3req = global.s3client.get('foo').on('response', function(s3res){
        //Region B
        res.set('content-length', s3res.headers['content-length']); //This will fail
        s3res.on('data', function(chunk){
            res.write(chunk);
        });
    });
    //Region C
    s3req.end();
}

Wenn ich Kopf-oder status-code auf res in der Region Ein, funktioniert alles einwandfrei. Wenn ich versuche, allen, die in Region B, erhalte ich "Can' T set Kopfzeilen, nachdem Sie gesendet werden" - Fehler. Beachten Sie, dass ich möchte, um Header zu setzen auf res, nicht s3res

Vermutlich response.writeHead aufgerufen oder ausgelöst, irgendwo vor der Reaktion Rückruf der knox s3client aufgerufen wird. Gibt es irgendein debug-flag oder einen anderen Weg, der Knoten ausspucken Wann/wo writeHead aufgerufen wurde? Knoten 0.10 fügt eine response.headersSent, aber es wäre extrem schwer zu füllen mein code und alle 3rd-party-Bibliotheken mit einem Scheck von dieser Flagge, um herauszufinden, wo diese immer genannt. Oder ist es irgendwie etwas anderes, um herauszufinden, dieses problem?

  • Ich begegne dieser vor einiger Zeit. kann ich empfehlen, zu versuchen, eine andere version der express zunächst, d.h. ein upgrade oder downgrade Ihres express.js.
  • Ich habe versucht, sowohl die Express 3.1 und 3.2.1. Ich habe auch versucht den Knoten 0.10.3 und Knoten 0.10.5
Schreibe einen Kommentar