sveltejs / kit

web development, streamlined
https://kit.svelte.dev
MIT License
17.81k stars 1.78k forks source link

Throwing an error in the browser in `load` results in a 500 internal error #12168

Open MathiasWP opened 2 weeks ago

MathiasWP commented 2 weeks ago

Describe the bug

According to https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#server_error_responses the 500 response is used to indicate that an error has occurred on the server. This is kind of confusing when the error is thrown in the browser.

Reproduction

Link to repro: https://github.com/MathiasWP/500-internal-error-sveltekit-browser

The +page.js load method that will throw a 500 Internal Error

import { browser } from "$app/environment"

export const load = () => {
    if(browser) {
        throw new Error("Thrown on the client")
    }
    return {}
}

Logs

No response

System Info

System:
    OS: macOS 14.4.1
    CPU: (8) arm64 Apple M1 Pro
    Memory: 61.78 MB / 16.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 20.11.0 - ~/.nvm/versions/node/v20.11.0/bin/node
    npm: 10.2.4 - ~/.nvm/versions/node/v20.11.0/bin/npm
    pnpm: 9.0.6 - /opt/homebrew/bin/pnpm
    bun: 1.0.0 - ~/.bun/bin/bun
  Browsers:
    Brave Browser: 124.1.65.114
    Chrome: 124.0.6367.62
    Safari: 17.4.1
  npmPackages:
    @sveltejs/adapter-auto: ^3.0.0 => 3.2.0 
    @sveltejs/kit: ^2.0.0 => 2.5.7 
    @sveltejs/vite-plugin-svelte: ^3.0.0 => 3.1.0 
    svelte: ^4.2.7 => 4.2.15 
    vite: ^5.0.3 => 5.2.10

Severity

annoyance

Additional Information

No response

Conduitry commented 2 weeks ago

This is the intended behavior, but perhaps it could be documented better that +error.svelte won't just be rendered for errors that happen on the server.

Also related: #8080