Errore kudeaketarako ardura bakarreko objektu bat ez izateak, errore garrantzitsuak ezkutatzeko aukerak ugaritzen ditu kudeaketa ezegoki baten eraginpean. Errore kudeaketarako objektua, errorea begibistako bihurtzearen arduradun da, adibidez, egoki formateatutako erregistro batean idatziz, ebentuak Sentry, Rollbar, edota Raygun bezalako monitorizazio sistemaren batera bidaliz. Express bezalako web framework gehienak, errore kudeaketa middleware mekanismo bat proposatzen dute. Errore kudeaketa fluxu tipiko bat hau izan daiteke: moduluren batek errore bat jaurtitzen du -> API routerrak errorea harrapatzen du -> errorea middlewarera hedatzen du, (adibidez Express edo KOA), zeinek erroreak harrapatzeko ardura duen -> errore kudeatzaile zentralizatu bati deitzen zaio -> middlewareari esaten zaio ia errore hau konfiantzazkoa den (ez operazio errorea) aplikazioa dotoreki berrekiteko. Kontutan izan Express midelwarean erroreak kudeatzea praktika arrunta dela, okerra izan arren. Hau egiteak ez ditu kontutan hartzen weba ez diren bestelako interfazeetako erroreak.
Javascript
// DAL (Data Access Layer) geruza, ez ditugu erroreak hemen kudeatzen
DB.gehituDokumentua(bezeroBerria, (errorea, emaitza) => {
if (errorea)
throw new Error('Errore azalpen bikaina dator hemen', bestelako parametro erabilgarri batzuk)
});
// API bide kodea, errore sinkrono eta asinkronoak harrapatu eta middlewarera desbideratzen ditugu hemen
try {
bezeroZerbitzua.gehituBerria(req.body).then((emaitza) => {
res.status(200).json(emaitza);
}).catch((errorea) => {
next(errorea)
});
}
catch (errorea) {
next(errorea);
}
// Errore-kudeaketa middlewarea, errore kudeatzaile zentralizatuari uzten diogu errore kudeaketa
app.use(async (errorea, req, res, next) => {
const operazioErroreaDa = await erroreKudeatzailea.kudeatuErrorea(errorea);
if (!operazioErroreaDa) {
next(errorea);
}
});
Typescript
// DAL (Data Access Layer) geruza, ez ditugu erroreak hemen kudeatzen
DB.gehituDokumentua(bezeroBerria, (errorea: Error, emaitza: Result) => {
if (errorea)
throw new Error('Errore azalpen bikaina dator hemen', bestelako parametro erabilgarri batzuk)
});
// API bide kodea, errore sinkrono eta asinkronoak harrapatu eta middlewarera desbideratzen ditugu hemen
try {
bezeroZerbitzua.gehituBerria(req.body).then((emaitza: Result) => {
res.status(200).json(emaitza);
}).catch((errorea: Error) => {
next(errorea)
});
}
catch (errorea) {
next(errorea);
}
// Errore-kudeaketa middlewarea, errore kudeatzaile zentralizatuari uzten diogu errore kudeaketa
app.use(async (errorea: Error, req: Request, res: Response, next: NextFunction) => {
const operazioErroreaDa = await erroreKudeatzailea.kudeatuErrorea(errorea);
if (!operazioErroreaDa) {
next(errorea);
}
});
Javascript
module.exports.kudeatzailea = new erroreKudeatzailea();
function erroreKudeatzailea() {
this.erroreaKudeatu = async (errorea) => {
await logger.erroreaErregistratu(errorea);
await kritikoaBadaAdministrariariPostaElektronikoaBidali;
await kritikoaBadaOperazioZerrendanGorde;
await erabakiIaOperazioErroreaDen;
};
}
Typescript
class ErroreKudeatzailea {
public async erroreaKudeatu(errorea: Error): Promise<void> {
await logger.erroreaErregistratu(errorea);
await kritikoaBadaAdministrariariPostaElektronikoaBidali();
await kritikoaBadaOperazioZerrendanGorde();
await erabakiIaOperazioErroreaDen();
}
}
export const kudeatzailea = new ErroreKudeatzailea();
Javascript
// zuzeneko errore kudeaketa middlewarean, Cron atazak eta frogatze erroreak kudeatuko dituena?
app.use((errorea, req, res, next) => {
logger.erroreaErregistratu(errorea);
if (errorea.larritasuna == erroreak.altua) {
posta.postaElektronikoaBidali(
konfigurazioa.administrariPostaElektronikoa,
"Errore kritikoa gertatu da",
errorea
);
}
if (!errorea.operazioErroreaDa) {
next(errorea);
}
});
Typescript
// zuzeneko errore kudeaketa middlewarean, Cron atazak eta frogatze erroreak kudeatuko dituena?
app.use((errorea: Error, req: Request, res: Response, next: NextFunction) => {
logger.erroreaErregistratu(errorea);
if (errorea.larritasuna == erroreak.altua) {
posta.postaElektronikoaBidali(
konfigurazioa.administrariPostaElektronikoa,
"Errore kritikoa gertatu da",
errorea
);
}
if (!errorea.operazioErroreaDa) {
next(errorea);
}
});
Blogeko aipua: "Batzuetan maila baxuagoek beren deitzaileari errorea bidaltzea baino ezer praktikoagorik ezin dute egin"
Joyent blogeko “Node.js errore kudeaketa" hitz gako bati esker sailkatua
…Errore bera pilaren maila askotan kudeatzen bukatuko duzu. Hau gertatzen da maila baxuenek beren deitzaileei (eta beste haiek beren deitzaileei, etab.) errorea bidaltzea baino beste ezer egokiagorik ezin dutenean egin. Askotan, soilik goi mailako deitzaileak daki zein den erantzun zuzena, ia ahalegin operazio berria den, erabiltzaileari errorearen berri eman behar dion, edo beste edozer. Baina horrek ez du esan nahi errore guztiak goi mailako callback bakar bati jakinarazi behar dizkiozunik, callback horrek ere errorea zein testuingurutan gertatu den ez daki eta…
JS Recipes blogeko “Node.js errore kudeaketa" 17 hitz gakori esker sailkatua
……Hackathoneko Starter api.js kontrolatzaile bakarrean, 79 errore objektu inguru daude. Errore bakoitza bakarka kudeatzeak kodea ikaragarri bikoiztea eragin dezake. Hurrengo egin dezakezun gauza hoberena da errore kudeaketa logika Express middleware bati uztea…
Daily JS blogeko “Node.js errore kudeaketa" 14 hitz gakori esker sailkatua
……Errore objektuetan ezaugarri erabilgarriak zehaztu beharko zenituzke, baina ezaugarri horiek tinko erabiliz. Eta, ez gurutzatu korronteak: HTTP erroreak ezin dira zure datu basearen kodean egon. Edota, nabigatzaile garatzaileentzat, Ajax erroreak zerbitzariarekin hitz egiten duten kodean egon daitezke, baina Mustache txantiloiak prozesatzen dituen koderik ez…