sveltejs / kit

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

+server.ts must have a GET method or build fails #10735

Open ryanylee opened 12 months ago

ryanylee commented 12 months ago

Describe the bug

In a route, I have a +page.svelte and +server.ts file, and in the +server.ts file I only have a POST method and export const prerender = false. When I build, it fails, but when I add an empty GET method, build runs perfectly fine.

Reproduction

https://stackblitz.com/edit/sveltejs-kit-template-default-p5tugw?description=The%20default%20SvelteKit%20template,%20generated%20with%20create-svelte&file=src%2Froutes%2Fabout%2F%2Bserver.js&title=SvelteKit%20Default%20Template

Logs

Error: 405 /about (linked from /)
To suppress or handle this error, implement `handleHttpError` in https://kit.svelte.dev/docs/configuration#prerender

System Info

System:
    OS: Linux 5.0 undefined
    CPU: (8) x64 Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
    Memory: 0 Bytes / 0 Bytes
    Shell: 1.0 - /bin/jsh
  Binaries:
    Node: 16.20.0 - /usr/local/bin/node
    Yarn: 1.22.19 - /usr/local/bin/yarn
    npm: 9.4.2 - /usr/local/bin/npm
    pnpm: 8.6.10 - /usr/local/bin/pnpm
  npmPackages:
    @sveltejs/adapter-auto: ^2.0.0 => 2.1.0 
    @sveltejs/kit: ^1.20.4 => 1.25.0 
    svelte: ^4.0.5 => 4.2.0 
    vite: ^4.4.2 => 4.4.9

Severity

annoyance

Additional Information

No response

SudoerWithAnOpinion commented 12 months ago

You seem to have missed this error when you run your build:

Error: 405 /about (linked from /)
To suppress or handle this error, implement `handleHttpError` in https://kit.svelte.dev/docs/configuration#prerender

Your Header component contains <a href="/about">About</a>, this is requiring /about to need to be handled via a GET request or error handler in order to function. This is a sanity check.

Removing the link allows the build to succeed.

ryanylee commented 11 months ago

But what if I want to include the link?

eltigerchino commented 11 months ago

The prerenderer crawls the root page / but incorrectly prefers the endpoint over the page, even when it doesn't have a GET method, which causes the error.

eltigerchino commented 11 months ago

Possibly related https://github.com/sveltejs/kit/issues/10515

hyunbinseo commented 6 months ago

This seems to be the root cause.

The prerenderer crawls the root page / but incorrectly prefers the endpoint over the page, even when it doesn't have a GET method, which causes the error.

This is enough to trigger the error.

<!-- src/routes/+page.svelte -->
// src/routes/+page.svelte
export const prerender = true;
// src/routes/+server.ts
export const POST = () => new Response(null);

In a new skeleton project, running pnpm build will log the following message:

Error: 405 / - To suppress or handle this error, implement handleHttpError