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);
};
Другие вопросы по тегам