UNPKG

@opengis/fastify-table

Version:

core-plugins

76 lines (75 loc) 2.85 kB
import errorMessage from "./errorMessage.js"; import logger from "./getLogger.js"; import pgClients from "../pg/pgClients.js"; // avoid process exit with exception on network changes: disconnect from db, internet altogether etc process.on("uncaughtException", (err) => { if (err.message === "Connection terminated unexpectedly" || err.code === "ECONNRESET") { logger.file("pg", { error: err.toString() }); console.warn("⚠️ Ignored pg connection drop:", err.toString()); return; } logger.file("uncaughtException", { error: err.toString(), stack: err.stack }); // throw err; // keep normal behavior }); // avoid process exit with rejection during client connect at process start process.on("unhandledRejection", (err) => { if ([ "Client was closed and is not queryable", "Connection terminated due to connection timeout", ].includes(err.message)) { logger.file("pg", { error: err.message }); console.warn("⚠️ Ignored pg connection timeout / close:", err.toString()); return; } if (err.message === "Connection is closed." || err.message.includes("maxRetriesPerRequest")) { logger.file("redis", { error: err.message }); console.warn("⚠️ Ignored redis connection close:", err.toString()); return; } if (err.code === "ERR_HTTP_HEADERS_SENT") { logger.file("fastify", { error: err.code, stack: err.stack }); console.warn("Ignored fastify reply sent exception:", err.toString()); return; } logger.file("unhandledRejection", { error: err.toString(), stack: err.stack, }); throw err; }); async function plugin(fastify) { fastify.addHook("onResponse", async (req, reply) => { if (reply?.statusCode && reply.statusCode >= 400) { logger.metrics(`error-count:${reply.statusCode}`); } }); fastify.setErrorHandler(async (error, request, reply) => { // validation not error if (error.validation) { request.log.warn(request, { code: error?.code, status: 422, error: error.toString(), }); return reply.status(422).send({ error: error.toString(), code: 422 }); } // logger request.log.error(error, request); console.error({ msg: error.message, where: error.where, stack: error.stack, }); // errorMessage const msg = errorMessage(error); return reply .status(error.statusCode || 500) .send({ error: msg, code: error.statusCode || 500 }); }); fastify.addHook("onListen", async () => { logger.file("init", { db: pgClients.client?.options?.database }); }); } export default plugin;