support for throwing `error` in `handle` function
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
- start the application
- click on the "test hooks.server.ts" link
- a 401 error gets thrown inside
hooks.servert.ts - the page shows a 500 error
- reload the page
- 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
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
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.