Предположим мы хотим добавить в классическое todo приложение возможность сохранения данных.

image

Нам понадобится чтение данных из хранилища и сортировка для показа списка задач, сохранение данных при добавлении новой задачи, и удаление данных.

Для решения этой задачи мы можем использовать новую библиотеку databoom.angular.js для работы с хранилищем databoom.space из приложений Angular.js.

Пример и код приложения в песочнице.

Объявление сервиса


Первое, что мы делаем — это регистрация сервиса. Ангуляр предлагает несколько способов вынесения общего кода с использованием сервисов. Подробнее о них можно почитать здесь.

Для нашей задачи используется наиболее простой тип: фабрика

angular.module('todoApp', [])
.factory('db', databoomSrv('https://samples.databoom.space', 'sandboxdb'))
.controller('TodoListController', function (db) {
    ...
});

Чтение и сортировка списка задач


function updateList() {
    db.load('tasklist', { orderby: "date desc" })
        .then(function (data) { todoList.taskList = data })
}

Функция db.load('tasklist', { orderby: «date desc» }) посылает серверу запрос на чтение списка задач (все объекты в коллекции 'tasklist'). Запрос также сопровождается требованием отсортирать данные по дате в обратном порядке. Существуют также опции для фильтрации данных, постраничного вывода, раскрытия и т.д.

Добавление новой задачи в базу данных


todoList.addTodo = function () {
    if (!todoList.todoText) //save only not empty tasks
        return
    db.save('tasklist', { text: todoList.todoText, done: false, date: new Date() })
    .then(function () { updateList(); todoList.todoText = '' })
}

Функция db.save('tasklist', { text: todoList.todoText, done: false, date: new Date() }) сохраняет новую задачу (добавляет ее в коллекцию 'tasklist').

Удаление задачи


todoList.delTodo = function (id) { db.del(id).then(updateList) }

Функция db.del(id) удаляет объект с указанным id.


Чтобы сохранять и читать данные нужно лишь несколько строк кода на клиентском приложении и ни одного действия с сервером. Сервер databoom позволяет сохранять данные как они есть — без предварительного описания схемы данных и администрирования сервера.


Подробнее API библиотеки можно посмотреть здесь.

Развитие библиотеки


В следующей версии библиотеки появится возможность:
  1. кэширования данных в локальном хранилище на случай обрыва связи с последующей синхронизацией с сервером.
  2. постоянной онлайн синхронизации данных между клиентами (с использованием websockets) — например, при добавлении новой задачи она сразу же становится видна всем.

Комментарии (4)


  1. FaNtAsY
    29.07.2015 14:35
    +1

    Другими словами, это инструкция, как использовать databoom. В частности, с Angular.


  1. Glebcha
    02.08.2015 09:23

    Что мешает кому-то поднять монгу на своем сервере и без особых усилий использовать socket.io с валидацией по токену, а на клиенте localStorage для кэширования?
    Нет, ну вы бы хоть описали стек что-ли, примерную реализацию. А так это простой мануал, место которому на промо-страничке вашего сайта.


    1. databoom Автор
      03.08.2015 14:29

      решение databoom отличается от простого решения на основе mongo
      1) поддержка OData стандарта для запросов к базе данных — OData позволяет делать довольно сложные запросы с клиента для которых, в случае использования mongo понадобится писать функции на сервере
      2) благодаря OData огромное количество контролов (гриды, деревья и т.д.) автоматически работают с databoom — не надо писать вообще никаких кодов для сортировки, постраничного вывода, фильтрации данных, гриппировки и т.д. — контролы автоматически формируют OData запрос на сервер
      3) возможность выполнять сложные графовые запросы к той же самой базе используя язык запросов SPARQL

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


      1. Glebcha
        03.08.2015 19:40

        Вот именно это и хотелось бы узнать, а не как использовать готовое решение.