Мой текущий запрос выглядит так:
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});
}
);
});
таким образом, если вы хотите обрабатывать больше параметров, вы можете просто добавить их в оператор «существующийParams»
Других решений пока нет …