req.body не определен при извлечении метода удаления в Next.js
Я действительно не знаю почему, но когда я пытаюсь получить данные и поместить их в тело ответа, он говорит «не определено» (в консоли). У меня почти 2 одинаковых компонента. Один использует метод 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`);
}
};
Это API для const {id_product} = req.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
}
})
Я пытался решить эту проблему уже пару часов, но вообще не продвинулся.
2 ответа
Раньше это работало до самого недавнего обновления. На GIthub есть множество проблем, но я не знаю, ответил ли кто-нибудь из сопровождающих Next.js. В настоящее время он блокирует нам обновление. Я понимаю, что это нетипично, но это кардинальное изменение Next.js, и я не хочу переносить все наши конечные точки DELETE :(.
https://github.com/vercel/next.js/issues/49353
delete
запросы не содержат тела, вы можете попробовать использоватьpatch
вместо этого метод, если вам нужно тело в этом запросе