Next Js Не удается заполнить базу данных данными с помощью внутреннего POST API
<div className={styles.Panier}>
<p onClick={()=>Quantity>0?NewItem(data,Quantity):console.log("Quantity must be more
than 0")}>Add To Cart</p>
</div>
При нажатии на этот div выполняется следующая функция:
let NewItem = async (data,Qte) => {
const response = await fetch('/api/UpdateCart',{
method: "POST",
body: JSON.stringify(
{
Qte,
data,
cartId: Cookies.get('cart')
}
),
headers:{
'Content-Type': 'application/json; charset=utf8'
},
});
console.log(response);
};
Обычно это должно идти к API в «/api/UpdateCart» (кстати, я использую prisma):
import { PrismaClient } from "@prisma/client";
export default async function handler(req, res)
{
let prisma = new PrismaClient();
let Id = req.body.Id;
let Qte = req.body.Qte;
let cartId = req.body.cartId;
//Creates the new item and adds it to the cart
let newItem = await prisma.item.create({
data: {
ProductId: Id,
Quantity: Qte,
CartId: cartId
}
});
return res.status(200).json(newItem);
}
Теперь проблема в том, что когда я пробую конечную точку в почтальоне, она работает как шарм, но когда я использую доступ к ней изNewItem
функции, о которой я упоминал ранее, я получаю ошибку сервера 500 следующим образом:
POST http://localhost:3000/api/UpdateCart 500 (внутренняя ошибка сервера)
Response {type: 'basic', url: 'http://localhost:3000/api/UpdateCart', redirected: false, status: 500, ok: false, …}
body
:
(...)
bodyUsed
:
false
headers
:
Headers {}
ok
:
false
redirected
:
false
status
:
500
statusText
:
"Internal Server Error"
type
:
"basic"
url
:
"http://localhost:3000/api/UpdateCart"
[[Prototype]]
:
Response
Я надеюсь, что вы можете мне помочь, и спасибо за ваше время
1 ответ
После более чем дня поиска я обнаружил, что проблема была на самом деле в коде API, поскольку у меня были отношения «один ко многим», я должен был «подключить» полные записи «Корзина» и «Продукт» к моей записи товара.
1. Это код API перед решением:
import { PrismaClient } from "@prisma/client";
export default async function handler(req, res)
{
let prisma = new PrismaClient();
let Id = req.body.Id;
let Qte = req.body.Qte;
let cartId = req.body.cartId;
//Creates the new item and adds it to the cart
let newItem = await prisma.item.create({
data: {
ProductId: Id,
Quantity: Qte,
CartId: cartId
}
});
return res.status(200).json(newItem);
}
2. Это правильный код API:
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
export default async (req, res) => {
let PrId = req.body.prodId;
let Qte = req.body.Qte;
let newItem = await prisma.item.create({
data:{
Quantity: Qte,
Product:{
connect:{
Id: PrId,
},
},
Cart:{
connect:{
Id: req.body.cartId
}
}
},
});
return res.status(200).json(newItem);
};