Модуль отправки сообщений через nodejs-email

Получение модуля:

git clone git://git.appcode.pw/nodejs-email.git
или
npm install git://git.appcode.pw/nodejs-email.git

Применение

Добавляем модуль:

var nodejsEmail = require('nodejs-email')(settingOrPath);

,где settingOrPath:any — путь к файлу с настройками, либо передается объект  (см. ниже) с уже прочитанными данными

Затем в нужном месте вызываем метод:

nodejsEmail.send(subject:string, messages:any[]);

, где:

    • subject: string — тема письма
    • messages: any[] — список сообщений

Формат сообщений

[{
   "body": "текст письма",
   "level": "error" // уровень
}]

Настройки

Настройки модуля хранятся в файле в следующем формате:

{
    "host": "you.smtp.ru", /// host: адрес smtp сервера;
    "port": 25, /// port: порт smtp сервера;
    "secure": false, /// secure: используется шифрование или нет;
    "user": "sender@smtp.ru", /// user:  логин;
    "pass": "password", /// pass: пароль;
    "from": "\"Имя\" <sender@smtp.ru>", /// from: от кого;
    "to": "user@other.ru", /// to: через запятую указывается список адресов для отправки;
    "level": ["warn", "log", {
        "status": "error",
        "to": "spec@other.ru"
    }] /// level: warn, error, log, *;
}

где, level — это уровни отправки сообщений. Доступны следующие уровни:

  • log — уровень логирования, не является ошибкой
  • warn — предупреждение
  • error — ошибка
  • * — все выше указанные

Например для отправки только сообщений с ошибками указывать:

level: ['error']

Для отправки только предупреждений и ошибок:

level: ['error', 'warn']

Для отправки сообщений определенного типа, определенным пользователям:

"level": ["warn", "log", {
"status": "error",
"to": "a-krasnov@it-serv.ru"
}]

 

Синхронизация

Синхронизация

Синхронизация бывает нескольких типов:

  • Полная или ручная (Full) – передаются на сервер все не переданные данные, очищается хранилище и загружаются все данные с сервера
  • Обновление с учетом даты последней синхронизации (Medium) – передаются на сервер все не переданные данные и загружаются новые данные
  • Сохранение выполненного задания (Lite) – передаются на сервер все не переданные данные
  • Передача геоданных (Geo) – передаются на сервер геоданные на сервер. Может выполнятся параллельно
  • Сохранение информации о пользователе (User) – передается на сервер информация о пользователе и загружается новая. Может выполнятся параллельно
Тип

синхронизации

Выполняется при старте Передача данных Загрузка данных Загрузка с учетом даты пред. синхронизации Параллельное выполнение Очистка данных после загрузки Возможность отменить
Full + + + + + +
Meduim + + +
Lite +
Geo + +
User + + +

 

Особенности:

  • При первом запуске всегда выполняется Full – синхронизация
  • При каждом запуске, но не первом, выполняется Medium-синхронизация
  • После каждого выполнения задания запускается Lite-синхронизация
  • Каждую N-секунд (по умолчанию 60 сек) выполняется Geo-синхронизация
  • После создания аватарки выполняется User-синхронизация
  • Одновременное выполнение Full, Medium, Lite невозможно
  • Full – синхронизация может запускаться вручную независимо от других типов

 

 

 

 

 

 

 

 

 

 

 

Процесс

Синхронизация выполняется только при наличии интернет соединения.

 

 

Выполняется выборка из

локального хранилища

тех записей, которые,

нуждаются в добавлении,

обновлении, удалении

 

 

 

 

 

 

 

Количество передаваемых байт

зависит от типа соединения:

  • wifi,4g,3g – 1 Мбит
  • 2g — 9,6 кбит

 

 

 

 

После удачной передачи данных,

переданный пакет обрабатывается

на сервере, клиент ожидает

результат

 

 

 

Не зависимо от результата

выполнения информация

передается на устройство

 

 

 

 

 

Если в результат обработки

данных обнаруживается,

ошибка, то локальные данные

которые были переданы на

сервер помечаются как

«требующие повторной

передачи»

Отключить уведомление об обновлении версии linux

Открываем файл

/etc/update-manager/release-upgrades

Находим строчку Prompt и устанавливаем параметр never

Prompt = never

 

Работа с настройками

Для работы с настройками применяется класс IServ.Utilits

  • getConf: (string)=>any — возвращается значение настройки переданной методу
  • setConf: (string, any)=>void — устанавливается значение настройки

Установка значение в файл config.json физически не производится. Новое значение настройки заносится в localStorage

var port = Utilits.getConf('port');
console.log(port); // вывод номера порта
Utilits.setConf('port', 2500); // установка порта, запись происходит в localStorage
Utilits.getConf('port'); // чтение произошло из localStorage

Подробнее о настройках можно узнать здесь.

Использование модуля диагностики в приложении

В пакете developer_package доступен модуль IServ.Developer.Diagnostic. Данный модуль является singleton классом состоящим из одного главного метода start и массива tasks.
Для создания списка заданий, которые например должны выполняться при запуске приложения нужно выполнить следующий код:

Diagnostic.tasks.push(function(callback) {
     // тут метод для обработки, если есть ошибки, то нужно заполнить объект Diagnostic.messages - это массив
     // после выполнения вызвать callback();
});

Diagnostic.start(); // запуск диагностики

После запуска диагностики, если найдены ошибки будет выведено окно со спискам сообщений.

Использование команд разработчика

Пакет developer_package содержит модуль для перехвата введенного кода, с последующим его выполнением. Данная возможность позволяет скрытно выполнять операции без использования интерфейса приложения.

Для ввода кода требуется зажать клавишу SHIFT, нажать символ ~ (буква ё в русской раскладке) и вводить комбинацию символов. Читать далее «Использование команд разработчика»

Создание пакетов для деления проекта на модули

Пример генерации:

sencha generate package [name_package]

, где [name_package] наименование пакета без пробела.

Генерация пакетов предоставляет следующие возможности:

  • делит проект на модули
  • позволяет использовать пакет в других проектах
  • позволяет переопределять поведение классов и методов (ядра) для конкретного заказчика

Читать далее «Создание пакетов для деления проекта на модули»

Вывод пунктов меню для overflow:menu

Для вывода панели с кнопками которые не влезают

Нужно использовать специальные панели IServ.UI.Classic.ListViewToolbar или IServ.UI.Classic.DetailViewToolbar
Все элементы данных панелей могут быть двух видов:

  • кнопка с иконкой и текстом
  • кнопка с иконкой

Читать далее «Вывод пунктов меню для overflow:menu»

Изменено поведение валидации для Ext.data.validator.Bound

Проверка Ext.data.validator.Bound считает ошибкой ту запись для которой указано, что максимальная длина (2), например равна 10, но при этом эта запись может содержать значение null (1).

Пример:

Ext.define('Core.model.info_columns', { 
    extend: 'Ext.data.Model', 
    ...
    fields: [
         ...
         { name: 'width', type: 'string', allowNull: true }, // (1) может быть null
         { name: 'format', type: 'string', allowNull: true }
         
    ],

    validators: {
        ...
        width: { type: 'length', max: 10 }, // (2) ограничение по длине
        format: { type: 'length', max: 32 }
    }
});

Чтобы исправить такое поведение нужно указать, что минимальное значение равно null (3)

Пример:

Ext.define('Core.model.info_columns', { 
    extend: 'Ext.data.Model', 
    ...
    validators: {
        ...
        width: { type: 'length', max: 10, min: null }, // (3) ограничение по длине
        ...
    }
});