在Next.js中获取方法delete时未定义req.body

hk8txs48  于 2023-05-17  发布在  其他
关注(0)|答案(2)|浏览(163)

我真的不知道为什么,但是当我试图获取数据并将其放入我的响应主体时,它说未定义(在控制台中)。几乎有两个相同的组件。一个使用POST方法并返回一个填充的主体,另一个使用DELETE方法并返回一个未定义的主体。我正在使用Prisma模式。
这是一个POST,它工作并返回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`);
    }
  };

这是该函数的API的开始,const { id_product } = req.body工作。

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

这就是我遇到的麻烦,组件基本上是相同的,除了方法:

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

这是,const {id_product} = req的API,body未定义

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

我已经试着解决这个问题几个小时了,但我一点进展都没有。

3qpi33ja

3qpi33ja1#

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

uinbv5nw

uinbv5nw2#

这是一个很好的工作,直到最近的更新。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

相关问题