• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Node.js error handling - exceptions, unhandledRejection...

HackNation - ogólnopolski hackathon
+2 głosów
583 wizyt
pytanie zadane 6 kwietnia 2021 w JavaScript przez _Visni4PL_ Obywatel (1,320 p.)

Dzień dobry, jaki waszym zdaniem jest najbezpieczniejszy i najlepszy sposób na przechwytywanie wszelakich błędów w node.js? Wydaje mi się, że używanie try catch nie jest najlepszym pomysłem, ponieważ zmniejsza to czytelność kodu i łatwo jest w niektórych miejscach najzwyczajniej o tym zapomnieć :). Próbowałem coś wymyślić jednak średnio to działa.

Linijki odpowiedzialne za przechwytywanie błędów w index.js:

const error = require('./middleware/error');
const winston = require('winston');

winston.exceptions.handle(
        new winston.transports.File({ filename: 'uncaughtExceptions.log' })
);

process.on('unhandledRejection', (ex) => {
        throw ex;
});

Plik error to funkcja middleware, która wygląda w taki sposób:

const winston = require('winston');

module.exports = function(err, req, res, next) {
    winston.error(err.message, err);

    return res.status(500).send('Something failed.');
};

Niektóre błędy są logowane w pliku uncaughtExceptions.log i konsoli, lecz przy 

throw new Error('err')

użytkownik dalej dostaje wiadomość błędu z konkretnym plikiem i linijką. Może ktoś bardziej doświadczony mi pomoże, bo wiem, że bez poprawnego przechwytywania błędów nie mogę pójść dalej, a wyczerpał mnie już trochę ten temat.

3
komentarz 6 kwietnia 2021 przez rafal.budzis Szeryf (85,900 p.)
To że użytkownik otrzymuje informacje na temat błędów jest spowodowane raczej sposobem w jaki uruchamiasz aplikacje. Poczytaj jak uruchomić aplikacje w trybie produkcyjnym. Dobrze skonfigurowane zmienne środowiskowe rozwiązują problem.

2 odpowiedzi

+3 głosów
odpowiedź 6 kwietnia 2021 przez Comandeer Guru (607,330 p.)

Może ktoś bardziej doświadczony mi pomoże, bo wiem, że bez poprawnego przechwytywania błędów nie mogę pójść dalej, a wyczerpał mnie już trochę ten temat.

Dlaczego nie możesz iść dalej? 

Strzelam, że apka jest na express.js. W takim wypadku jest dokładnie tak jak @rafal612b mówi: wymuszenie trybu produkcyjnego powinno pomóc.

Niemniej IMO try/catch w newralgicznych miejsach, do lokalnej obsługi błędów (zwłaszcza w głównych miejscach logiku biznesowej) są najlepszym rozwiązaniem. Globalne handlery są już raczej siatką ochronną, jakby coś jednak wyciekło.

0 głosów
odpowiedź 6 kwietnia 2021 przez _Visni4PL_ Obywatel (1,320 p.)
Dziękuję już bardziej rozumiem temat ;)

Podobne pytania

0 głosów
0 odpowiedzi 377 wizyt
pytanie zadane 5 maja 2018 w JavaScript przez Venglas Obywatel (1,160 p.)
0 głosów
0 odpowiedzi 299 wizyt
pytanie zadane 14 lipca 2018 w PHP przez Carians Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 716 wizyt
pytanie zadane 29 marca 2022 w JavaScript przez KubaLaska Początkujący (350 p.)

93,626 zapytań

142,549 odpowiedzi

323,034 komentarzy

63,129 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1210p. - dia-Chann
  2. 1197p. - DziarnowskiJ
  3. 1177p. - Łukasz Piwowar
  4. 1172p. - CC PL
  5. 1161p. - Maurycy W
  6. 1141p. - Adrian Wieprzkowicz
  7. 1138p. - raydeal
  8. 1134p. - Tomasz Bielak
  9. 1116p. - rucin93
  10. 1101p. - robwarsz
  11. 1100p. - Mariusz Fornal
  12. 1024p. - ssynowiec
  13. 885p. - Dominik Łempicki (kapitan)
  14. 847p. - Grzegorz Aleksander Klementowski
  15. 838p. - Wojciech Malicki
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...