diff --git a/src/app.ts b/src/app.ts index cd8a26fc..3dfc8fe5 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,7 +1,7 @@ import type http from 'http' import { withoutTrailingSlash } from 'ufo' import { defineLazyEventHandler, toEventHandler, createEvent, isEventHandler, defineEventHandler } from './event' -import { createError, sendError } from './error' +import { createError, sendError, isError } from './error' import { send, sendStream, isStream, MIMES } from './utils' import type { Handler, LazyHandler, Middleware } from './types' import type { EventHandler, CompatibilityEvent, CompatibilityEventHandler, LazyEventHandler } from './event' @@ -62,6 +62,9 @@ export function createApp (options: AppOptions = {}): App { if (options.onError) { await options.onError(err as Error, event) } + if (!isError(err)) { + console.error('[h3]', err) // eslint-disable-line no-console + } await sendError(event, err as Error, !!options.debug) } } diff --git a/src/error.ts b/src/error.ts index f3e54b12..0b686335 100644 --- a/src/error.ts +++ b/src/error.ts @@ -56,13 +56,7 @@ export function createError (input: Partial): H3Error { * In the debug mode the stack trace of errors will be return in response. */ export function sendError (event: CompatibilityEvent, error: Error | H3Error, debug?: boolean) { - let h3Error: H3Error - if (error instanceof H3Error) { - h3Error = error - } else { - console.error('[h3]', error) // eslint-disable-line no-console - h3Error = createError(error) - } + const h3Error = isError(error) ? error : createError(error) if (event.res.writableEnded) { return @@ -85,3 +79,7 @@ export function sendError (event: CompatibilityEvent, error: Error | H3Error, de event.res.setHeader('Content-Type', MIMES.json) event.res.end(JSON.stringify(responseBody, null, 2)) } + +export function isError (input: any): input is H3Error { + return input instanceof H3Error +}