API-интерфейс Node.js с Express & amp; mysql — применять параметр поиска, только если установлен

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

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

0

Решение

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

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});
}
);
});

таким образом, если вы хотите обрабатывать больше параметров, вы можете просто добавить их в оператор «существующийParams»

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector