• 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...

Aruba Cloud - Virtual Private Server VPS
+2 głosów
494 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,520 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 (606,920 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 300 wizyt
pytanie zadane 5 maja 2018 w JavaScript przez Venglas Obywatel (1,160 p.)
0 głosów
0 odpowiedzi 243 wizyt
pytanie zadane 14 lipca 2018 w PHP przez Carians Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 477 wizyt
pytanie zadane 29 marca 2022 w JavaScript przez KubaLaska Początkujący (350 p.)

93,335 zapytań

142,330 odpowiedzi

322,416 komentarzy

62,669 pasjonatów

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...