Niedawno rozpocząłem pracę nad aplikacją opartą na Express.js, która również korzysta z modułu pg (https://github.com/brianc/node-postgres)Centralizacja obsługi błędów w aplikacji opartej na Express.js
Spędziłem również znaczną ilość czasu, czytając o obsłudze błędów węzła i wyrażania, korzyściach z właściwego zaprojektowania oprogramowania pośredniczącego itd. Jednak powtarzający się problem wciąż budzi mnie bez rozwiązania.
Powiedz, mam następujący sposób Router:
app.get("/:someThing/:someId", function(req, res, next) {
pgClient.query("some SQL query", function(err, data) {
if (err) { return next(err); } // some 500 handler will take it
if (data.rows.length == 0) {
next(); // send it over to a 404 handler
}
//finally, here we get the chance to do something with the data.
//and send it over via res.json or something else
});
});
Jeśli Czytałem poprawnie, należy to właściwy sposób to zrobić. Założę się jednak, że możesz również przyznać, że jest to zbyt wiele z podstaw do przepisywania w kółko ... i od nowa, nawet w tej samej metodzie routera, na wypadek, gdybyśmy mieli wiele zagnieżdżonych wywołań zwrotnych.
Zadaję sobie pytanie, jaki byłby najlepszy sposób radzenia sobie z taką sytuacją centralnie. Wszystkie moje pomysły obejmują przechwytywanie metody pgClient.query. W jednym, metoda zapytania po prostu wyrzuci błąd zamiast przekazać go do wywołania zwrotnego. W innym, wywołanie pgClient.query spowoduje wysłanie metody routera obok pgClient. Następnie przechwycona metoda zapytania będzie wiedziała, jak sobie poradzić z następnym przekazanym do niej.
Z tego, co wiem, rzucanie błędów wokół nich nie jest właściwym sposobem, aby dostać go do 500 procedur obsługi. Z drugiej strony, passin jako opcja do pgClient daje tak niski poziom dużo wiedzy na temat powyższych warstw, które w oparciu o moją wiedzę i doświadczenie mogą prowadzić do sprzężenia, i nie jest zbyt dobra.
Co sugerujesz?
'/: Coś /: someId'? –
tak, zmieniłem to – user1219569
nie, myślałem o jednej trasie dla wszystkich 500 próśb. –