Я не смог найти ответ на этот вопрос.Я использую экспресс в своем бэкэнде и пытаюсь построить маршрут для фильтрации результатов на основе пользовательского ввода.Вот что у меня есть:
router.get(
"/search",
passport.authenticate("jwt", { session: false }),
(req, res) => {
const keyword = req.query.keyword;
const location = req.query.location;
if (keyword) {
Task.paginate({
limit: 10,
sort: "_id"
}).then(tasks => {
let filtered = tasks.results.filter(task => {
return task.title.toLowerCase().includes(keyword.toLowerCase());
});
res.json({ ...tasks, results: filtered });
});
} else if (location) {
Task.paginate({
limit: 10,
sort: "_id"
}).then(tasks => {
let filtered = tasks.results.filter(task => {
return task.location.toLowerCase().includes(location.toLowerCase());
});
res.json({ ...tasks, results: filtered });
});
}
}
);
Как видно из этого маршрута, я отправляю пользовательский ввод через строки запроса.(ключевое слово и местоположение).Если пользователь передал только ключевое слово, я отфильтрую задачи, чтобы увидеть, содержит ли заголовок строку, переданную пользователем.Это прекрасно работает в сценарии, где пользователь ищет только одну строку.
Example:
Title: "Work to be done today"
Search input: work
output: tasks
Now, what about this scenario:
Title: "Work to be done today"
Search: work today
output: []
Если я введу два слова, которые не являются одно за другим, задача не найдена.Как я могу найти всю строку для слов из ввода и вернуть задачу, если какие-либо слова присутствуют?(Регулярное выражение?) * * 1007