Чтение пакета можно осуществлять при помощи модуля transfer-package
При работе с модулем sync-transfer доступна возможность передачи провайдера для обработки, по умолчанию создан sync-postgresql-provider Он позволяет работать с БД PostgreSQL
Для реализации своего собственного провайдера с поддержкой другой БД нужно реализовать следующие методы провайдера:
- applyToDb — обработка данных для добавления, обновления и удаления данных по указанным таблицам
- select — выборка данных из БД для обновления информации на клиенте
- append — отличается тем, что очистка записей на клиенте для таблицы не происходит, а выполняется простое добавление информации
- saveAttachments — сохранение файлов в файловой системе
- getAttachments — считываются файлы из файловой системы
Каждый метод возвращает объект, который содержит результат обработки. Пример результат:
{
__errors: [],
items: [] // для метода select данного свойства не будет
}
// пример для select
{
__errors: [],
tableName: [],
tableName2: []
}
Объект (массив) __errors содержится всегда. Он предназначен для хранения ошибок при обработке. Формат ошибки:
{
message: 'текст ошибки'
}
Объект ошибки всегда должен состоять как минимума из одного свойства message
Подробное описание методов можно узнать здесь
Применение собственного провайдера
var syncCustomProvider = require('sync-custom-provider');
...
var provider = syncPostgreSqlProvider();
app.use(transfer(TEMP_FOLDER), provider);
Подробнее читать тут
Исходный код
git clone git://git.appcode.pw/sync-postgresql-provider.git
npm install
Особенности обработки
Формат возвращения вложенных данных (файлов):
{
buffer: Buffer, // массив байтов, получается путем вызова fs.readFile
path: string // относительный путь к файлу. Например /readme.txt
}
Формат результата сохранения вложения:
{
__sync: true,
__key: string, // имя первичного ключа обычно id, можно получить из дополнительной информации data.custom.__key
[__key]: any // значение первичного ключа
}
Формат результат выборки данных:
{
tableName: [], // массив значений для сущности tableName
tabelName2: [] // массив значений для сущности tableName2
}
Формат применения (создания, обновления, удаления) данных:
{
...,
__sync: true
}