Совпадение списка поисковых терминов в ответе - PullRequest
0 голосов
/ 04 марта 2019

Я создаю окно экспресс-поиска на экспресс-сервере, и оно показывает 2 ошибки.

(1) TypeError (2) Unhandled Promise rejection

CODE:

router. post('/search-phrasing', async (req, res) => {
        const {
            phrasing
        } = req.body;
        const

 phrasingArray = phrasing.trim().split(' ');

phrasingArray.map(async (phrasing) => {
    let suggestions = [];

    await Response.find({
        entities: {
            $regex: new RegExp(phrasing)
        }
    }).sort({
        phrasing: 'asc'
    }).then((data) => {
        if (data[0]) {
            suggestions.push({
                id: data[0]._id,
                phrasing: data[0].phrasing
            });

            res.send(suggestions);
        }
    }).catch((err) => console.log(err));
});
});

1 Ответ

0 голосов
/ 04 марта 2019

Не пытайтесь зациклить асинхронные функции таким образом, так как это не требуется, и, конечно, не отправляйте ответы в цикле.Вместо этого вам следует .map() список регулярных выражений для $in:

router.post('/search-phrasing', (req, res) => {
  const { phrasing } = req.body;

  if (phrasing == undefined || ( typeof(phrasing) != 'string' ) )  {
    console.error("phrasing is required as a string");
    return res.end(); // really should have better error handling
  }

  const phrasingArray = phrasing.trim().split(' ');

  Response.find({ entities: { $in: phrasingArray.map(e => RegExp(e)) })
    .sort('phrasing')
    .select('phrasing')
    .then(suggestions => res.send(suggestions))
    .catch(err => console.error(err));
})

Оператор $in принимает массив аргументов для сопоставления.Также случается принимать регулярные выражения в качестве этих аргументов.Это просто сокращение для оператора $or, но оно всегда применяется к одному полю.

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

Также проверьте ваши типы ввода.Не думайте вслепую, что вы предоставили необходимые данные в тело сообщения POST.Проверьте наличие, как показано здесь, в противном случае вы получите исключения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...