kit
kit copied to clipboard
[fix] handle redirects in handle hook while processing data request
Fixes #7787
During fixing this, I wondered why the tests also pass without the fix, and discovered that this specific behavior will only occur if there's no root +layout.server.js (because then it wouldn't try to rerequest the data, failing again, resulting in a fallback to the server where the redirect would be handled correctly), which we have in the tests. I'm not sure if it's worth creating another test suite for this, so I left it like this.
Please don't delete this checklist! Before submitting the PR, please make sure you do the following:
- [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs
- [x] This message body should clearly illustrate what problems it solves.
- [x] Ideally, include a test that fails without this PR but passes with it.
Tests
- [x] Run the tests with
pnpm testand lint the project withpnpm lintandpnpm check
Changesets
- [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running
pnpm changesetand following the prompts. All changesets should bepatchuntil SvelteKit 1.0
🦋 Changeset detected
Latest commit: 6089d13cb4ed206194cacf55148c0db391ebe9ea
The changes in this PR will be included in the next version bump.
This PR includes changesets to release 1 package
| Name | Type |
|---|---|
| @sveltejs/kit | Patch |
Not sure what this means? Click here to learn what changesets are.
Click here if you're a maintainer who wants to add another changeset to this PR
Reading this surprised me, because I found this issue in a project that had +layout.server.js.
After some tests I here's what I found:
- if you redirect in
hooks.server.jsand you don't have+layout.server.js, kit will load that route. If you have+page.server.jsin that route, it will fail with a 500 error. - if you have
+layout.server.js, the redirect will work. - but then if you don't have
+page.server.js, the redirect won't work.- if you have a
+page.jsthat fetches some stuff from an endpoint (which you may also be blocking with hooks) that fails, the page will fail with a 500 error. - if you don't have that, the page will display as normal, even though it shouldn't.
- if you have a