req.body tidak ditentukan apabila menggunakan kaedah DELETE dalam Next.js
P粉652523980
P粉652523980 2024-01-02 23:05:35
0
2
464

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

membalas semua(2)
P粉477369269

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

P粉609866533

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan