W linku, który podałeś jest coś takiego
if(total > 0) {
return res.status(200).send({status: 0, message: "Messages available"});
}
// Tutaj jeśli jest to ostatnia linijka w funkcji
// to return nie jest potrzebny.
// Te metody modyfikują obiekt `res` z tego co pamiętam
// i raczej olewają zwracaną wartość.
return res.status(503).send({status: 1, message: "Messages not available!"});
oraz identyczna wersja bez żadnego return.
W przypadku, gdy ten if
, zwróci false
, wywoła się ten dolny response
i API wyślę odpowiedź o statusie 503 i wiadomości XXX.
Tylko problem w tym, że metody res.status
, res.send
nie przerywają funkcji i jeśli jest jakiś dalszy kod to leci on dalej :]
Więc żeby temu zaradzić można dodać return
, albo jakieś if else
. Głównie chodzi o to, żeby skonstruować taki przebieg funkcji, gdzie metody res.status
i res.send
wywoływane są jedynie raz. W każdym requescie do API może być tylko jedna odpowiedź.
Tutaj przykład z if else
if(total > 0) {
res.status(...).send(...);
} else {
res.status(...).send(...)
}
To zależy od biblioteki z jakiej korzystamy do tworzenia API, ale większość z nich ignoruje wartość jaką zwrócimy z return
i służy to jedynie do przerwania funkcji
if(total > 0) {
res.status(...).send(...);
return; // funkcja nic nie zwraca, czyli mamy undefined
}
res.status(...).send(...)
Ten link https://www.codementor.io/@oparaprosper79/understanding-node-error-err_http_headers_sent-117mpk82z8
powinien lepiej to opisywać