gitpod-io / full-stack-web-development

The source code for the "Full Stack Web Development in the Cloud" course.
https://youtu.be/OUzaUJ3gEug
67 stars 34 forks source link

post Endpoint (not working) #27

Open oneezy opened 2 years ago

oneezy commented 2 years ago

Bug description

I'm taking the Fullstack SvelteKit course and running into a bug at the 2:56:00 mark when trying to create the post Endpoint https://youtu.be/OUzaUJ3gEug?t=10560

import type { RequestHandler } from "@sveltejs/kit";

// this breaks...
export const post: RequestHandler<{}, FormData> = (request) => {
  console.log(request.body.get("text"));
} 

When submitting the post request from the form, I get the 500 (Internal Server Error) and it appears that a new Breaking PR was merged in 7 days ago from rich that broke it https://github.com/sveltejs/kit/pull/3384

Can anyone recommend a good step-by-step for me to follow to fix?

Steps to reproduce

Follow the tutorial! :)

Expected behavior

No response

Example repository

You can see the finished code in question on Github https://github.com/gitpod-io/full-stack-web-development/blob/main/src/routes/todos/index.json.ts

Anything else?

No response

j314h commented 2 years ago

Description du bogue

Je suis le cours Fullstack SvelteKit et je rencontre un bogue à la 2:56:00marque lorsque j'essaie de créer le post Endpoint https://youtu.be/OUzaUJ3gEug?t=10560

import type { RequestHandler } from "@sveltejs/kit";

// this breaks...
export const post: RequestHandler<{}, FormData> = (request) => {
  console.log(request.body.get("text"));
} 

Lors de la soumission de la demande de publication à partir du formulaire, j'obtiens le 500 (erreur de serveur interne) et il semble qu'un nouveau Breaking PR a été fusionné il y a 7 jours par Rich qui l'a cassé sveltejs/kit#3384

Quelqu'un peut-il me recommander une bonne étape par étape à suivre pour réparer?

Étapes à reproduire

Suivez le tutoriel ! :)

Comportement attendu

Pas de réponse

Exemple de référentiel

Vous pouvez voir le code fini en question sur Github https://github.com/gitpod-io/full-stack-web-development/blob/main/src/routes/todos/index.json.ts

Rien d'autre?

Pas de réponse

hello, did you find a solution? I'm in the same situation as you.

here is my code

export const post = async ({ request }) => {
  const t = await request.formData();
  console.log(t.get('test'));

  return {
    status: 200,
    headers: {
      location: '/',
    },
    body: {
      state: true,
    },
  };
};

my console.log() returns me a " file{} " an empty object. the "test" key exists but it is empty

if you solved your problem i would like some help thank you for your future response

oneezy commented 2 years ago

hey @j314h , I actually did solve it!

This will get you halfway through the tutorial but I'm running into more issues as I get further along. But I'm confident in making it to the end. Still reading through the new SvelteKit docs and seeing how to update code that's changed.

Anyways, give this a try and let me know if it helps.

import type { RequestHandler } from "@sveltejs/kit";

// get
export const get: RequestHandler = async ({ request }) => {
  return {
    status: 200,
    body: "Hello from the API!"
  }
}

// post
export const post: RequestHandler = async ({ request }) => {
  const formData = await request.formData();

  return {
    body: formData.get('text') as string
  }
}
Huansock commented 2 years ago

hey guys i had same Problem too. and i fixed it without RequestHandler. for that i read BodyParsing in SvelteKit Doc https://kit.svelte.dev/docs/routing#endpoints-body-parsing

Here's my code

export async function post({ request }: any) {
    const data = await request.formData(); // or .json(), or .text(), etc
    todos.push({
        created_at: new Date(),
        text: data.get('text') as string,
        done: false
    });
    return {
        status: 303,
        headers: {
            location: '/'
        }
    };
}
zfbxrk518 commented 2 years ago

Huansock

Thank you Huansock, it works! Your answer is the best! It's just now you still need to change the word "post" into uppercase "POST", otherwise it still fails.