h3 icon indicating copy to clipboard operation
h3 copied to clipboard

Global hooks are not called when an error is thrown

Open antoinerey opened this issue 11 months ago • 1 comments

Environment

h3: latest (1.11.1) node: v18.18.0 (on Stackblitz), and v20.10.0 (on my machine)

Reproduction

The full reproduction is here https://stackblitz.com/edit/unjs-h3-bql2cu.

export const app = createApp({
  onRequest(event) {
    console.log('onRequest');
    console.log(event.path);
    console.log(getResponseStatus(event));
  },

  onError(error, event) {
    console.log('onError');
    console.log(event.path);
    console.log(getResponseStatus(event));
  },

  onBeforeResponse(event) {
    console.log('onBeforeResponse');
    console.log(event.path);
    console.log(getResponseStatus(event));
  },

  onAfterResponse(event) {
    console.log('onAfterResponse');
    console.log(event.path);
    console.log(getResponseStatus(event));
  },
});

app.use(
  '/',
  eventHandler((event) => {
    throw createError({
      message: 'Oops',
      statusCode: 500,
    });
  })
);

Describe the bug

With the above setup, loading / produces logs from the onRequest hook, but that's it. I would expect to have onError called (at least), and likely onBeforeResponse and onAfterResponse since a response is sent anyway.

Additional context

I'm not deeply familiar with h3, but I've been trying to dig deeper following another issue I've created on Nuxt side: https://github.com/nuxt/nuxt/issues/26113.

So, I've set this reproduction up, and I'm now confused as no hook but onRequest is called. I might be missing something, but I've read the documentation and browsed issues, and could not find anything obvious.

Logs

No response

antoinerey avatar Mar 06 '24 17:03 antoinerey