Concepto general: estoy accediendo a dos puntos finales de API. Uno responde con información general y el otro con información específica.
He llamado al primer punto final y con la respuesta, devuelvo un objeto en el formato que requiere el segundo punto final como parámetro.
Problema: sigo recibiendo "Los datos después de la transformación deben ser una cadena, un ArrayBuffer, un Buffer o un Stream"
Quiero aprender a usar funciones en todos los controladores, para no tener que REPETIRME.
Código:
Esto devuelve el objeto que necesito usar en la segunda llamada a la API:
const axios = require("axios"); const getSpecials = async (req, res) => { try { const response = await axios.get(`${apiURL}/categories`); let specials = []; let skus = []; response.data.forEach((element, index) => { if (response.data[index].is_special == true) { specials.push({ name: response.data[index].name, product_skus: response.data[index].product_skus, _id: response.data[index]._id, }); skus.push(response.data[index].product_skus); } }); return { product_skus: skus.flat() }; } catch (error) { console.log(error.message); } }; module.exports = {getSpecials}Esto devuelve los detalles del producto si publico el retorno de la primera llamada a la API como parámetro:
const axios = require("axios"); const { getSpecials } = require("./categoriesControllers"); const specialProducts = async (req, res) => { try { const response = await axios.post(`${apiURL}/products`, getSpecials); res.status(200).json(response.data); } catch (error) { console.log(error.message); } };Cualquier sugerencia sobre la mejor manera de hacer esto sería genial. Quiero aprender a dejar que el backend haga todo el trabajo pesado y quiero servir los datos de la manera más limpia posible al front-end.
Si entiendo correctamente, solo necesitas cambiar
const response = await axios.post(`${apiURL}/products`, getSpecials);
a esto
const response = await axios.post(`${apiURL}/products`, await getSpecials());
porque en este momento está pasando una declaración de función al segundo argumento de la función de publicación de axios, no un valor de retorno de getSpecials