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