Próbuję zdebugować przerażony błąd Can't set headers after they are sent
w aplikacji Express.js. W szczególności używam biblioteki knox do rozmowy z s3.Najlepszy sposób debugowania "Nie można ustawić nagłówków po ich wysłaniu" błąd w Express/Node.js?
grubsza, mam ten program obsługi Express, za pomocą globalnej instancji s3client knox:
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();
}
Jeżeli ustawić dowolny kod nagłówka lub stanu na res
w obszarze A, wszystko działa bez zarzutu. Jeśli spróbuję tego w Regionie B, otrzymuję komunikat "Nie można ustawić nagłówków po ich wysłaniu". Zauważ, że chcę ustawić nagłówki na res
nie s3res
Przypuszczalnie response.writeHead
jest nazywany lub wyzwalane gdzieś przed odpowiedzią na oddzwanianie na s3client Knox miano. Czy jest jakaś flaga debugowania lub inny sposób, aby Node wypluł kiedy/gdzie został wywołany writeHead? Węzeł 0.10 dodaje response.headersSent
, ale byłoby niezmiernie trudno wypełnić mój kod i wszystkie biblioteki innych firm, sprawdzając tę flagę, aby dowiedzieć się, gdzie jest wywoływana. Czy jest jeszcze jakiś sposób na rozwiązanie tego problemu?
Poznałem to jakiś czas temu. czy mogę zaproponować wypróbowanie innej wersji ekspresowej najpierw, co oznacza uaktualnienie lub obniżenie wersji pliku express.js. – wayne
Próbowałem zarówno Express 3.1 i 3.2.1. Próbowałem również węzeł 0.10.3 i węzeł 0.10.5 –