Node.js API с экспрессом и mysql - применять параметр поиска, только если установлен

0

Мой текущий запрос выглядит так:

router.get('/search?', function(req, res, next) {
    var title = req.query.title;
    var active = req.query.active;
    var sql = "SELECT * from users WHERE title = ? AND active = ?"; 
    connection.query(sql, [title, active], function (error, results, fields) {
        res.json({"status": 200, "error": null, "response": results});
    });
});

Он работает, я вхожу:

localhost:4001/api/v1/users/search?title=mr&active=1

Но он не работает, если он не установлен:

localhost:4001/api/v1/users/search?title=mr

{"status":200,"error":null,"response":[]}

Как я могу сделать запрос и вернуть нужную строку независимо от того, установлен ли один или другой параметр поиска или нет? Так вот:

localhost:4001/api/v1/users/search?title=mr
localhost:4001/api/v1/users/search?active=1 
localhost:4001/api/v1/users/search?title=mr&active=1
localhost:4001/api/v1/users/search?active=1&title=mr    
Теги:
express

1 ответ

2
Лучший ответ

вы можете попытаться построить свой запрос динамически в соответствии с параметрами, заданными в запросе:

router.get('/search?', function(req, res, next) {
    var sql = "SELECT * from users ";
    const existingParams = ["title", "active"].filter(field => req.query[field]);

    if (existingParams.length) {
        sql += " WHERE ";
        sql += existingParams.map(field => '${field} = ?').join(" AND ");
    }

    connection.query(
        sql,
        existingParams.map(field => req.query[field]),
        function (error, results, fields) {
            res.json({"status": 200, "error": null, "response": results});
        }
    );
});

таким образом, если вы хотите обрабатывать больше параметров, вы можете просто добавить их в оператор "existingParams"

  • 0
    Вы пропустили последнее условие var sql = "SELECT * from users"; const существующиеParams = ["title", "active"]. filter (field => req.query [field]); if (существующийParams.length! == 0) sql + = 'ГДЕ';
  • 0
    К сожалению, это не работает должным образом ... Я предоставил результаты выше.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню