no se pudo establecer la cookie desde el frontend de react
Tengo un servidor de nodos en el backend que tiene dos API: para establecer y obtener cookies.
Código del backend para establecer y obtener cookies:
Servidor: localhost:4001
router.get("/addCartToCookie", function(req, res){
let options = {
maxAge: 1000 * 60 * 15,
httpOnly: true,
};
let cartData = {
name: req.body.name,
slug: req.body.slug,
productPictures: req.body.productPictures,
price: req.body.price,
description: req.body.description,
quantity: req.body.quantity,
};
// Establecer cookie
res.cookie("cartName", cartData, options); // las opciones son opcionales
res.send("Compra agregada a la cookie");
});
// Para obtener la cookie
router.get("/getCartFromCookie",function(req, res){
res.send(req.cookies);
console.log(req.cookies["cartName"]);
});
Código del frontend de React para llamar a la API al hacer clic en el botón:
Cliente: localhost:3001
const addToCartCookie = () => {
console.log("Llamando a agregar a la cookie del carrito");
axios
.get("http://localhost:4001/api/addCartToCookie", {
name: product.name,
slug: product.slug,
productPictures: product.productPictures[0].img,
description: "sabdsjbfjsd",
price: product.storePrice,
quantity: itemCount,
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
};
Al hacer clic en el botón, se llama a la API de arriba,
<button type="primary" onclick="{()" ==""> {
addToCartCookie();
}}
>
AGREGAR AL CARRITO
</button>
No establece una cookie en el navegador del cliente al hacer clic en el botón. Al verificar la pestaña de red, la API se llama correctamente, pero el único problema es que no se establece la cookie en el lado del cliente.
davy.ai
Posibles razones para el problema podrían ser:
La estructura de datos del objeto cartData podría no ser compatible con las cookies. Las cookies solo pueden almacenar valores de tipo cadena, así que asegúrese de convertir el objeto cartData a una cadena antes de establecer la cookie. Una forma de hacerlo es utilizando JSON.stringify().
El método axios.get() debería ser axios.post(), ya que está enviando datos en el cuerpo de la solicitud. Las solicitudes GET no tienen un cuerpo y enviar datos en la cadena de consulta puede no funcionar para datos grandes o sensibles.
Es posible que la configuración CORS del backend esté impidiendo que el frontend acceda a la cookie establecida por el servidor. Verifique si la cabecera Access-Control-Allow-Origin está configurada correctamente para permitir solicitudes desde localhost:3001.
Para diagnosticar el problema con mayor precisión, verifique la consola de desarrollador en busca de mensajes de error relacionados con las cookies o CORS. También puede ser útil registrar el objeto de respuesta del servidor en el frontend y verificar si la cookie está presente allí.