6 марта в 14:06

Работа с CouchDB на примере JavaScript приложения «Todo List» из песочницы

В какой-то промежуток времени мне пришлось работать с одной из документоориентированных СУБД — Apache CouchDB, но у меня возникли трудности с поиском документации. В этой статье хочу рассказать о том, как же работать в этой СУБД из JavaScript на примере небольшого приложения «Todo List». Так как статья ориентирована на ApacheCouchDB – я не буду показывать и рассказывать о том, как работает приложение в полной мере.

Модель


Принцип работы этого приложения выглядит следующим образом:

1. При загрузке страницы отправляем запрос к серверу БД.
2. Получаем от него JSON структуру.
3. Парсим ее на страницу.
4. По необходимости добавляем какие-либо записи…
5. При нажатии на клавишу «Сохранить», записываем данные в БД.

Все содержимое страницы хранится в следующем виде:

model = {   
	items: [
        {
        _id: 1,
        date: "11.11.11", 
        name: "Тестовый лист 1", 
        does:[{
            check : 'true',
            name : 'Тест 1',
            time : '00:00'
          }]
      }
        { 
        _id: 2, 
        date: "11.11.11", 
        name: "Тестовый лист 2 ", 
        does:[{
            check : 'true', 
            name : 'Тест 2 ', 
            time : '00:00'
        }]
    }
        
    ]

    }

Каждый из элементов items хранит в себе лист, который включает в себя список дел, в примере выше каждый список содержит по одному элементу (does).

Итак мы имеем модель для хранения данных. Следующим шагом следует непосредственно работа с СУБД

Установка CouchDB


Самый простой способ установки CouchDB – перейти на сайт и скачать установочный дистрибутив для вашей операционной системы.

Проверка работоспособности
После установки CouchDB нужно проверить ее на работоспособность, для этого необходимо перейти по адресу: 127.0.0.1:5984. Убедившись что в ответ вы получили следующее:

image

Можно переходить к следующему шагу.

Панель управления


Работа с панелью управления CouchDB осуществляется с помощью интерфейса Futon, осуществить доступ к которому можно введя в адресную строку вашего браузера следующий адрес: 127.0.0.1:5984/_utils

Если все верно – перед вами появится панель управления (в версии 2.x.x панель управления выглядит иначе).

image

Щелкаем по кнопке «Create Database» и в поле вводим имя нашей БД

image

Все, на этом наша база создана, следующим шагом уже будет взаимодействие с этой базой конкретно из приложения.

Взаимодействие с БД из приложения


Я написал функциональную часть приложения, без подключения к базе, то есть оно работает в автономном режиме, после перезагрузки страницы все данные стираются. Нам необходимо реализовать запись созданных данных в базу, и извлечение их от туда при загрузки приложения.
Прочесав официальную документацию, я нашел плагин, написанный для чистого JavaScript, а так же для JQuery. Я решил использовать JQueryPlugin.

Находится он в сборке CouchDB которую мы качали, найти его можно по адресу 127.0.0.1:5984/_utils/script/jquery.couch.js

Запись данных в БД


После того, как приложение создает модель наших данных, нам нужно записать их в БД. Первым делом нужно указать хост и порт БД:

$.couch.urlPrefix = "http://localhost:5984";

Для обращения к базе, используется следующая функция

$.couch.db(“todo_model”).method

Нам нужен метод saveDoc – который перезаписывает документ в базе если у него такой же id, как у документа на входе и создает новый если id не совпадает ни с одним из существующих.

Далее необходимо циклом пройтись по каждому элементу модели приложения, и записать ее в базу.

for(var i = 0; i < $scope.list.items.length; i++){               
                var doc = $scope.list.items[i];
                doc._id = String(doc._id);
            $.couch.db("todo_model").saveDoc(doc, {
                    success: function(data) {
                        console.log(data);
                        },
                    error: function(status) {
                        console.log(status);
                        }
});       
}

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

В базе данных появились документы, которые хранятся в JSON формате.

image

Таким образом, с помощью плагина JQueryCouchDB можно с легкостью записывать данные в базу. Так же их от туда можно и достать, но я решил показать немного другой способ, который можно использовать без подключения каких либо сторонних плагинов.

HTTP запрос к CouchDB


При загрузке страницы я посылаю запрос на сервер, где находится наша база данных, в ответ мне приходит JSON структура с необходимыми данными:

 $http.get('http://127.0.0.1:5984/todo_model/_all_docs').then(function(response){      //Посылаю запрос на сервер          
                $scope.model_len = response.data.rows.length // Считываю количество элементов
                for (var i = 0; i < $scope.model_len; i++) {
                    var p = response.data.rows[i].id                     // Считываю id каждого элемента
                    $http.get('http://127.0.0.1:5984/todo_model/' + p ).then(function(data){ // Запрашиваю у сервера документ с конкретным id
                        model.items.push(data.data)            
                  });
             }
       });    

Я получаю все элементы, для фиксации их количества, после чего каждый из элементов я «пушу» в модель.

Заключение


Существует мало документации по данной СУБД, я показал один из способ работы с ней, и, надеюсь, кому-то помог.
Евгений @khveugen_27
карма
4,0
рейтинг 0,0
Web разработчик
Самое читаемое Разработка

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

  • +3

    Не смотрели https://pouchdb.com/?
    Возможно вам этот способ еще больше понравится.

    • 0
      Честно говоря не натыкался, но вот сейчас прочитал немного, и появился интерес покапать в эту сторону.
  • 0
    Недавно прочитал книгу про CouchDB, вроде все хорошо описано и тоже с примерами. Рекомендую.
    http://guide.couchdb.org/

    А вот еще официальная документация для примера туду-листа на PouchDb — https://pouchdb.com/getting-started.html

    Для некоторых сценариев, master-master replication очень хорошо помогает. В этом и есть основная соль CouchDb, помимо прямого «безбэкендного» доступа через http. На этом основан проект PouchDb.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.