Estoy implementando una función de controlador que deberá pasar algunas consultas de la base de datos al motor de plantillas, específicamente, necesito incluir los datos de categoría y marca de los productos para que el usuario pueda filtrar más por categoría y marca.
para hacer esto, consulto los productos y los guardo en un objeto, luego paso ese objeto, filtro los identificadores y hago la consulta de la base de datos, luego guardo esa consulta en el objeto mencionado y repito
esto no parece estar funcionando... probablemente la función de modelo de consulta no se está implementando correctamente y estoy recuperando el objeto de promesa al consultar las categorías
find: (req,res)=>{ Products.findAll({ where: { name: {[Op.like]: `%${req.query.search_query}%`} } order: [["createdAt", "DESC"]] }) .then((products)=>{ let catalogData = {} catalogData['products'] = products return catalogData }) .then((catalogData)=>{ let categoryIdArray = idArrayGenerator(catalogData.products, 'categoryId') let categoryObject = queryModel(Categories, categoryIdArray) catalogData['categories'] = categoryObject return catalogData }) .then((catalogData)=>{ let brandIdArray = idArrayGenerator(catalogData.products, 'brandId') let brandObject = queryModel(Brands, brandIdArray) catalogData['brands'] = brandObject return catalogData }) .then ((catalogData)=>{ res.render(path.resolve(__dirname, '../views/main/catalog'), { title: "Catalogo | Vigilancia Argentina", products: catalogData.product, categories: catalogData.categories, brands: catalogData.brands, })}) .catch(error => res.send(error)) function idArrayGenerator(products, property){ let Array = products.map(product => product.property) let ArraySanitized = lodash(Array).sortedUniq().sortBy() return ArraySanitized } function queryModel(Model, idArray){ return Model.findAll({ where:{ id: idArray } }) .then ((data) => {return data}) } }Tiene un error en su función idArrayGenerator. Debe utilizar la notación entre paréntesis cuando acceda dinámicamente a una propiedad de objeto, es decir, utilice producto[propiedad] en lugar de producto.propiedad:
function idArrayGenerator(products, property){ let Array = products.map(product => product[property]) let ArraySanitized = lodash(Array).sortedUniq().sortBy() return ArraySanitized }