Отфильтровать по категориям в express + mondodb

108
06 февраля 2022, 10:10

req.body.categories приходит массив выбранных категорий например [{name: 'vue'}, {name: 'react'}...] как можно найти и вывести все посты с такими категориями? В моём коде я думал обойти циклом forEach но у меня появляеться ошибка в консоли SyntaxError: await is only valid in async function

exports.filter = async function(req, res) {
try {
if (req.body.categories.length) {
  let postsArr = []
  req.body.categories.forEach(item => {
    const post = await Post.find({ category: item.name });
    if (post) {
      postsArr.push(post)
    }
  })
  res.status(200).send(postsArr);
}
} catch (error) {
    res.status(500).send(error);
}

};

Answer 1

Это ошибка отображается из-за того, что у вас await находится не в async функции:

req.body.categories.forEach(item => { // тут функция не async

Если вы хотите по одной категории запрашивать из БД, можно сделать что-то такое:

for (let item of req.body.categories) {
    const post = await Post.find({ category: item.name });
    if (post) {
        postsArr.push(post);
    }
}

Но можно сделать вообще по другому, запрашивать все нужную информацию сразу:

if (req.body.categories.length) {
    let names = req.body.categories.map(category => category.name);
    let postsArr = await Post.find({ category: { "$in": names } });
    res.status(200).send(postsArr);
}
READ ALSO
Инициализация нескольких swiper slider

Инициализация нескольких swiper slider

на странице есть четыре слайдера, инициализирую как два разных slider1 и slider2Слайдеры под классом slider1 и slider2 по два слайдера в каждом классе,...

183
Найти объект с помощью перебора массива

Найти объект с помощью перебора массива

Есть select нужно с помощью перебора массива вывести ключ(red,blue,green) к которому относится значение select, то-есть если мы выбираем в select "Академгородок"...

98
Не компилируется build webpack

Не компилируется build webpack

Проблема вот в чем, сделал проект пытаюсь его скомпилировать а он не компилируется, подскажите пожалуйста как это поправить я совсем слабый...

95
Вместо маркера загружается второе окно ,,найти,,

Вместо маркера загружается второе окно ,,найти,,

Подскажите где ошибка в коде - строкаvar SearchControl = new ymapscontrol

73