import { ErrorRequestHandler, Request, Response } from "express"; import { HttpError } from "http-errors"; import { createLogger } from '../lib/logger'; import { NgitLocals } from "../types/NgitLocals"; const consoleLog = createLogger("server:server"); /** * Router koji se izvršava u slučaju grube greške koja nije obrađena nigdje prije * @param err error objekt * @param req express request * @param res express response * @param next */ export const finalErrorRouter:ErrorRequestHandler = async (err:HttpError, req, res, next) => { const errorLogText:string = JSON.stringify({ message:err.message, name:err.name, stack:err.stack }); consoleLog(`Server Error ${err.status}\n${errorLogText}`); // `headersSent` će biti TRUE ako je router kod kojeg se dogodila greška već poslao header-e // > ako ih probam ponovo postaviti, to će baciti grešku i u ovom slučaju SRUŠITI SERVER - to ne smijemo dopustiti if(!res.headersSent) { res.status(err.status); res.setHeader('Content-Type', "text/html"); res.end(`unhandled server error`); } else { // AKO nije pozvan `end` - pozovi ga i završi obradu zahtjeva // ... u suprotnom će konekcija ostati otvorena do timeout-a if(!res.writableEnded) { res.end(); } } };