Heim  >  Fragen und Antworten  >  Hauptteil

req.body ist undefiniert, wenn die DELETE-Methode in Next.js verwendet wird

Ich weiß nicht wirklich warum, aber wenn ich versuche, die Daten abzurufen und in den Antworttext einzufügen, wird in der Konsole undefiniert angezeigt. Ich habe zwei fast identische Komponenten. Einer verwendet die POST-Methode und gibt einen ausgefüllten Körper zurück, der andere verwendet die DELETE-Methode und gibt einen undefinierten Körper zurück. Ich verwende die Prisma-Architektur.

Dies ist ein POST, der ausgeführt werden kann und den API-Body zurückgibt

export default function Product({
  id_product,
  name,
  link_image,
  price,
}: ProductProps) {
  const [test, testing] = useState(false);
  const { push: relocate } = useRouter();

  const onAddToCart = async () => {

    let response = await fetch("/api/addToCart", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        id_product: id_product,
      }),
    });

    if (response.ok) {
      toast.success(`${name} was added to the cart`);
    } else {
      toast.error(`${name} is already in your cart`);
    }
  };

Dies ist der Anfang der API dieser Funktion, const { id_product } = req.body ist gültig.

async function handlePost(req: NextApiRequest, res: NextApiResponse) {
    const session = await getServerSession(req, res, authOptions);
    const client = connexion()
    const { id_product } = req.body;
 
    const user = await client.user.findFirst({
        where: { email: session?.user?.email || undefined}
    })

    let cart = await client.cart.findFirst({
        where: {id_user: user?.id_user}
    })

Das ist das Problem, das ich habe. Die Komponenten sind im Grunde die gleichen, bis auf die Methode:

type ProductProps = products;

export default function ProductItem({
  id_product,
  description,
  publication_date,
  author,
  name,
  link_image,
  price,
}: ProductProps) {
  const onDeleteFromCart = async () => {
    let data = {
      id_product: id_product
    }
    let response = await fetch("/api/deleteFromCart", {
      method: "DELETE",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(data),
    });
    if (response.ok) {
        toast.success(`${name} was succesfully removed from your cart`)
    }
    else {
        toast.error(`Error`);
      }
  };

Dies ist eine API, const {id_product} = req.body ist undefiniert

async function handleDelete(req: NextApiRequest, res: NextApiResponse) {
    const session = await getServerSession(req, res, authOptions);
    const client = connexion()
    const  { id_product } = req.body
console.log(id_product)
    const user = await client.user.findFirst({
        where: { email: session?.user?.email || undefined}
    });
 
    let cart = await client.cart.findFirst({
        where: {id_user: user?.id_user}
    });
    let cart_item = await client.cart_item.findFirst({
        where: {
            id_cart: cart?.id,
            id_product: id_product
        }
    })

Ich versuche nun schon seit ein paar Stunden, dieses Problem zu lösen, ohne dass ich überhaupt Fortschritte gemacht habe.

P粉652523980P粉652523980313 Tage vor450

Antworte allen(2)Ich werde antworten

  • P粉477369269

    P粉4773692692024-01-03 20:14:48

    这在最近更新之前一直有效。 GIthub 上有很多问题,但我不知道 Next.js 的维护者是否已做出回应。目前它阻止我们更新。我知道这并不典型,但这是 Next.js 的一项重大更改,我不想迁移所有 DELETE 端点:(。

    https://github.com/vercel/next.js/issues/49353

    https://github.com/vercel/next.js/issues/48096

    https://github.com/vercel/next.js/issues/48898

    Antwort
    0
  • P粉609866533

    P粉6098665332024-01-03 18:43:13

    delete 请求不包含正文,如果您需要在此请求中包含正文,可以尝试使用 patch 方法

    Antwort
    0
  • StornierenAntwort