Динамическое формирование SQL запроса REST API
Приветствую!
Работаю с Node.JS. Для подключения к базе данных на Postgresql использую pg-promise. В GET запрос в параметрах приходит вот такая структура:
{
orderBy: { first_name: 'asc', last_name: 'desc' },
filters: { last_name: 'Albert A' }
}
Полей для фильтров (как и для сортировки) может быть больше, т. е. это структура формируется динамически. Я бы хотел в зависимости от того сколько полей имеет структура сформировать синтаксически правильный запрос, с учетом всех фильтров и сортировок или без них, если в параметрах они всё же не придут. Как это можно сделать наиболее простым способом? |
Нашел решение через squel
const validKeys = ['firstName', 'lastName', 'patronymic', 'birthday', 'gender', 'email'];
let orderBy = request.query.orderBy;
let filters = request.query.filters;
Object.keys(orderBy).forEach((key) => validKeys.includes(key) || delete orderBy[key]);
orderBy = snakecaseKeys(orderBy);
Object.keys(filters).forEach((key) => validKeys.includes(key) || delete filters[key]);
filters = snakecaseKeys(filters);
let query = squel.select()
.field('id')
.field('display_name')
.from('people');
Object.keys(filters).forEach((key) => {
query = query.where(`${key.toString()} = '${filters[key]}'`);
});
Object.keys(orderBy).forEach((key) => {
query = query.order(key.toString(), orderBy[key].toLowerCase() === 'asc');
});
query = query.toParam();
console.log(query.text);
Насколько хорошо это с точки зрения SQL-инъекций? |
Цитата:
Если понимание не пришло сразу - возьми еще, другой набор параметров... И снова напиши какой запрос должен получиться... Т.е. ты просто должен научиться делать текстовую строку из полученных данных. |
| Часовой пояс GMT +3, время: 05:56. |