From 5aa7288d97dafc3e3ba92f8c75db1a72d2bfeeb1 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Wed, 10 Aug 2022 16:47:23 +0100 Subject: [PATCH] fix(nuxt): log fatal errors as well as unhandled ones (#6488) --- packages/nuxt/src/core/runtime/nitro/error.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/nuxt/src/core/runtime/nitro/error.ts b/packages/nuxt/src/core/runtime/nitro/error.ts index d0579af724..8c27cac531 100644 --- a/packages/nuxt/src/core/runtime/nitro/error.ts +++ b/packages/nuxt/src/core/runtime/nitro/error.ts @@ -1,12 +1,13 @@ import { withQuery } from 'ufo' import type { NitroErrorHandler } from 'nitropack' +import type { H3Error } from 'h3' // @ts-ignore TODO import { normalizeError, isJsonRequest } from '#internal/nitro/utils' import { NuxtApp } from '#app' -export default async function errorhandler (_error, event) { +export default async function errorhandler (error: H3Error, event) { // Parse and normalize error - const { stack, statusCode, statusMessage, message } = normalizeError(_error) + const { stack, statusCode, statusMessage, message } = normalizeError(error) // Create an error object const errorObject: Exclude = { @@ -17,7 +18,7 @@ export default async function errorhandler (_error, event) { description: process.env.NODE_ENV === 'development' && statusCode !== 404 ? `
${stack.map(i => `${i.text}`).join('\n')}
` : '', - data: (_error as any).data + data: error.data } // Set response code and message @@ -25,8 +26,15 @@ export default async function errorhandler (_error, event) { event.res.statusMessage = errorObject.statusMessage // Console output - if ((_error as any).unhandled) { - console.error('[nuxt] [unhandled request error]', errorObject.message + '\n' + stack.map(l => ' ' + l.text).join(' \n')) + if (error.unhandled || error.fatal) { + const tags = [ + '[nuxt]', + '[request error]', + error.unhandled && '[unhandled]', + error.fatal && '[fatal]', + Number(errorObject.statusCode) !== 200 && `[${errorObject.statusCode}]` + ].filter(Boolean).join(' ') + console.error(tags, errorObject.message + '\n' + stack.map(l => ' ' + l.text).join(' \n')) } // JSON response