Мой текущий запрос выглядит так:
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
вы можете попытаться построить свой запрос динамически в соответствии с параметрами, заданными в запросе:
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"