kit icon indicating copy to clipboard operation
kit copied to clipboard

support for throwing `error` in `handle` function

Open ivanhofer opened this issue 3 years ago • 2 comments

Describe the problem

When doing a client-side __data.json request, errors thrown with the error helper function inside hooks.server.ts , will not return the correct error object.

It works as expected when error gets thrown inside a +server.* file.

Here is a demonstration of the issue; https://stackblitz.com/edit/sveltejs-kit-template-default-djcepj?file=src/hooks.server.ts

  1. start the application
  2. click on the "test hooks.server.ts" link
  3. a 401 error gets thrown inside hooks.servert.ts
  4. the page shows a 500 error
  5. reload the page
  6. the 401 error gets correctly shown

related: https://github.com/sveltejs/kit/issues/7609 The issue was already described as a sidenote there.

Describe the proposed solution

SvelteKit should support throwing error objects also for __data.json requests inside hooks.server.ts. This makes the usage of the error helper function more consistent.

Alternatives considered

Leave it as it is

Importance

would make my life easier

Additional Information

No response

ivanhofer avatar Dec 06 '22 12:12 ivanhofer

As a workaround, you can pass errors from your handle to your layout via locals. I've provided an example under 'alternatives' here: https://github.com/sveltejs/kit/issues/7272#issue-1410272076

theetrain avatar Dec 07 '22 17:12 theetrain

Thanks, but this looks really hacky and error-prone. Then I would prefer to return a regular Response object

// this
throw error(401, { message: 'Unauthhorized' })
// would become
return Response(
	JSON.stringify({ message: 'Unauthorized' }),
	{
		status: 401,
		headers: {
			'content-type': 'application/json'
		}
	)
)

As you can see using the raw Response object makes you write additional boilerplate code. That's the reason why the error helper function was introduced by the SvelteKit team.

Adding support for throwing error inside handle makes it just more consistent with the rest of SvelteKit.

ivanhofer avatar Dec 07 '22 17:12 ivanhofer