Как реализовать фильтрацию с помощью Node.js а MySQL?

#javascript #mysql #node.js #backend

Вопрос:

В настоящее время я изучаю, как реализовать фильтрацию, сортировку и разбиение на страницы в Node.js и серверная часть MySQL.

Текущее решение, которое у меня есть, — это:

 exports.getAll = (req, res) => {
    let params = {
        target_muscle: (req.query.target_muscle ? req.query.target_muscle : 'target_muscle')
    }
    Exercise.getAll(params, (error, result) => {
        if(error)
            res.status(500).send({
                message: error.message
            });
        else
            res.send(result);
    })
}
 

на контроллере, который вызывает этот метод из модели:

 Exercise.getAll = (params, result) => {
    db.query("SELECT
    exercise_id,
    username AS author,
    title, target_muscle,
    sets, reps, duration,
    likes,
    video_id
    FROM exercises
    JOIN users ON exercises.author_id = users.user_id
    WHERE target_muscle=?", [params.target_muscle], (error, res) => {
        if(error) {
            result(error, null);
            return;
        }
        result(null, res);
    })
}
 

Это прекрасно работает, когда у меня действительно есть параметр запроса, переданный в запросе GET, но дает мне пустой результат, когда я не передаю ни одного параметра. Я ожидал, что он будет нефильтрованным, когда я ничего не пропустил.

Ответ №1:

Вам нужно будет проверить, есть ли у вас значение параметра, прежде чем добавлять это условие в часть where вашего SQL-запроса. То, как вы это делаете, ваш код запрашивает вот так.

 WHERE target_muscle = 'target_muscle'