I'm implementing a controller function that will need to pass down a few database queries to the template engine, specifically I need to include the category and brand data of the products so that the user can filter further by category and brand, to do this I just...
This doesn't seem to be working... probably the query model function is not being properly implemented and I'm getting back the promise object when querying the categories
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.subcategories,
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})
}
}