Вашему вниманию представляю модуль для работы с postgreSQL базами данных. Модуль реализован с использованием механизма серверных зависимостей. При разработке используется npm пакет pg.
Возможности модуля
- Подключение осуществляется по connection string, указывается в настройках модуля
- Создание простых таблиц, с указанием полей, типа полей и опций (not null, default, etc.)
- Выполнение запросов и вывод результата в виде JSON-объекта
Реализация
Данный виджет показывает работу с серверными зависимостями. Чтобы их использовать, необходимо найти подходящий npm пакет на просторах Интернета. На текущий момент платформа поддерживает работу с пакетами CommonJS. Далее, необходимо установить docker и воспользоваться скриптом, приведенном в справке для создания архива.
После получения архива, его необходимо использовать внутри виджета. Подгружаем архив на вкладке Файлы и в сценариях на стороне сервера объявляем импорт пакета:
Код:
import * as pg from 'pg'
После объявляем необходимые нам функции, "собираем" внешний вид виджета, выполняем low-code часть работ. Привожу листинг функций, которые используются в модуле:
Код:
async function query(): Promise<void> {
// Выполняем подключение к базе данных
const client = new pg.Client({
connectionString: Namespace.params.data.connection_string,
})
await client.connect()
// Выполняем запрос к базе данных
const res = await client.query({text: Context.data.query_input})
// Выводим различные сообщения об успехе для разных видов команд
switch(res.command) {
case 'INSERT':
Context.data.result = 'Data inserted!'
break
case 'SELECT':
Context.data.result = JSON.stringify(res.rows)
break
default:
Context.data.result = 'ok'
break
}
// Закрываем подключение к базе данных
await client.end()
}
async function createTable(): Promise<void> {
let fields_string: string = ''
// Собираем в строку описание полей в соответствии с синтаксисом SQL
if(Context.data.table_fields && Context.data.table_fields.length > 0){
for(const item of Context.data.table_fields){
let options: string = ''
item.options ? options = item.options : options = ''
fields_string += `${item.field_name} ${item.field_data_type} ${options}, `
}
}
// Убираем последний пробел и запятую в списке с описанием полей
const prepared_string = `CREATE TABLE ${Context.data.table_name} (${fields_string.substring(0, fields_string.length-2)})`
// Выполняем подключение к базе данных
const client = new pg.Client({
connectionString: Namespace.params.data.connection_string,
})
await client.connect()
// Отправляем запрос в базу данных и выводим сообщение об успехе
const res = await client.query(prepared_string)
Context.data.result = `${res.command} table ${Context.data.table_name}!`
// Закрываем подключение к базе данных
await client.end()
}
С полной документацией по пакету можно ознакомиться здесь.