Rumah  >  Soal Jawab  >  teks badan

req.body tidak ditentukan apabila menggunakan kaedah DELETE dalam Next.js

Saya tidak tahu kenapa, tetapi apabila saya cuba mendapatkan data dan memasukkannya ke dalam badan tindak balas, ia berkata undefined (dalam konsol). Saya mempunyai dua komponen yang hampir sama. Satu menggunakan kaedah POST dan mengembalikan isi kandungan, yang satu lagi menggunakan kaedah DELETE dan mengembalikan kandungan yang tidak ditentukan. Saya menggunakan seni bina Prisma.

Ini adalah POST yang boleh dijalankan dan mengembalikan badan API

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`);
    }
  };

Ini adalah permulaan API fungsi ini, const { id_product } = req.body adalah sah.

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}
    })

Ini adalah masalah yang saya hadapi, komponen pada asasnya adalah sama kecuali kaedah:

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`);
      }
  };

Ini ialah API, const {id_product} = req.body is undefined

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
        }
    })

Saya telah cuba menyelesaikan masalah ini selama beberapa jam sekarang tanpa kemajuan sama sekali.

P粉652523980P粉652523980262 hari yang lalu381

membalas semua(2)saya akan balas

  • P粉477369269

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

    Ini berfungsi sehingga kemas kini terkini. Terdapat banyak soalan mengenai GIthub, tetapi saya tidak tahu sama ada penyelenggara Next.js telah menjawab lagi. Pada masa ini ia menghalang kami daripada mengemas kini. Saya tahu ini bukan perkara biasa, tetapi ini adalah perubahan penting untuk Next.js dan saya tidak mahu memindahkan semua DELETE titik akhir :(.

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

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

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

    balas
    0
  • P粉609866533

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

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

    balas
    0
  • Batalbalas