Совпадение списка поисковых терминов в ответе

Простым способом является использование обработчика события onsubmit

<script>
var submitHandler = function() {
  // your code
  return false;
}
</script>

<form method="get" onsubmit="return submitHandler()">....</form>

или более простого

<form onsubmit="return false;">
0
задан Neil Lunn 4 March 2019 в 06:37
поделиться

1 ответ

Не пытайтесь зациклить асинхронные функции таким образом, так как это не требуется, и, конечно, не отправляйте ответы в цикле. Вместо этого вам следует .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. Проверьте наличие, как показано здесь, в противном случае вы получите исключения

0
ответ дан Neil Lunn 4 March 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: