Установка
npm i --save slonik~22.7.1
npm i --save slonik-interceptor-query-logging~1.3.9
npm i --save-dev eslint-plugin-sql~1.2.1
Настройка .eslintrc
{
"rules": {
"sql/format": [
2,
{
"ignoreExpressions": true,
"ignoreInline": false,
"ignoreTagless": false
}
],
"sql/no-unsafe-query": [
2,
{
"allowLiteral": false
}
]
},
"plugins": [
"sql"
]
}
Подключение slonik.js
const { createPool } = require('slonik');
const { createQueryLoggingInterceptor } = require('slonik-interceptor-query-logging');
const interceptors = [createQueryLoggingInterceptor()];
export const pool = createPool("YOUR_POSTGRES_CONNECTION_STRING", {
interceptors,
});
//....
Примеры работы выборки
const { sql } = require('slonik');
await pool.connect(async (connection) => {
const result = await connection.maybeOne(
sql`SELECT
*
FROM
table
WHERE column = ${'column'}
`
);
});
});
Пример работы с транзакциями
await pool.connect(async (connection) => {
const result = await connection.transaction(
async (transactionConnection) => {
const firstTransaction = await transactionConnection.one(FIRST_SQL);
const secondTransaction = await transactionConnection.one(SECOND_SQL);
return transactionConnection.query(QUERY_SQL);
},
);
await connection.query(ANOTHER_SQL);
return result;
});
Выборка используя Array
Для этого используется sql.array:
`SELECT *
FROM story
WHERE
ARRAY[${sql.array(categories, 'text')}] @> ARRAY[categories]`
Обновление используя JSON
Для этого используется sql.json:
`UPDATE
client.passport
SET
session = ${sql.json(session)}
WHERE
id = ${id}`
Вставка блобов и временных значений
Для этого используется возможности sql.binary и метка «::timestamptz».
`INSERT INTO story.content
(
content,
created_at
)
VALUES (
${sql.binary(content)},
${date.toUTCString()}::timestamptz
)
RETURNING id`