Динамическое формирование 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, время: 03:39. |