req.body ist undefiniert, wenn die DELETE-Methode in Next.js verwendet wird
P粉652523980
P粉652523980 2024-01-02 23:05:35
0
2
405

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粉652523980
P粉652523980

Antworte allen(2)
P粉477369269

这在最近更新之前一直有效。 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

P粉609866533

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

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!