Статьи

Легко разрабатывайте приложения Node.js и Couchbase с помощью Ottoman

Недавно я прочитал статью на Scotch.io, касающуюся использования Mongoose и MongoDB. Я подумал про себя: эй, Couchbase может сделать то же самое, если вы используете Ottoman вместо Mongoose.

В этой статье мы рассмотрим те же сравнения, что и в статье Scotch.io, но вместо Mongoose и MongoDB будем использовать Ottoman и Couchbase.

Что такое осман?

Ottoman для Couchbase — это средство отображения документов объектов (ODM), которое позволяет вам построить то, как будет выглядеть ваша объектная модель, а затем автоматически сгенерировать всю шаблонную логику, которая с ней связана.

Используйте Ottoman для легкого доступа к командам CRUD для Couchbase Server с помощью Node.js. Чтобы использовать Ottoman, обязательно добавьте его в свой проект Node.js, используя следующую команду:

npm install ottoman --save

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

var ottoman = require("ottoman");

С османскими библиотеками, включенными в проект, нам теперь нужно дать Османской империи доступ к одному из наших блоков.

ottoman.bucket = (new couchbase.Cluster("http://localhost:8091")).openBucket("bucket-name-here");

Если вы ранее использовали Node.js SDK для Couchbase, вышеприведенное вам покажется знакомым. Мы просто подключаемся к кластеру, открываем ведро, а затем назначаем его Османской империи.

На этом этапе мы можем начать использовать Ottoman для ускорения процесса разработки.

Определение модели

Прежде чем мы сможем начать выполнять CRUD-операции против Couchbase, нам нужно определить нашу османскую модель. Эти модели представляют документы в нашей базе данных.

Модели, которые мы создаем с помощью Ottoman, могут иметь свойства и методы. Часть методов, к которой мы скоро доберемся, но пока проверим простые модели со свойствами.

Пример модели для пользователей

Давайте возьмем следующую модель для новых пользователей в нашем приложении (да, это просто в этом примере).

var UserModel = ottoman.model("User", {
        firstname: {type: "string"},
        lastname: {type: "string"},
        email: {type: "string"},
        created_at: {type: "Date", default: Date.now}
});

Теперь у нас есть модель, которую можно использовать так:

var myUser = new UserModel({
    firstname: "Nic",
    lastname: "Raboy",
    email: "test@example.com"
});

Мы устанавливаем имя , фамилию и адрес электронной почты , но нам не нужно устанавливать значение create_at . Это потому, что по умолчанию, если мы не установим его, он будет установлен как текущая временная метка.

Пользовательские Методы

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

UserModel.prototype.printWhoDaBoss = function() {
    console.log(this.firstname + " " + this.lastname + " is Da Boss");
}

Теоретически, это напечатало бы имя и фамилию конкретной османской модели.

Пример использования для пользовательских методов

Чтобы использовать пользовательский метод, мы можем использовать printWhoDaBoss, как показано ранее, и сделать что-то вроде этого:

var myUser = new UserModel({
    firstname: "Nic",
    lastname: "Raboy",
    email: "test@example.com"
});

myUser.printWhoDaBoss();

Вышеуказанное распечатало бы . Конечно, эта конкретная функция бесполезна, но вы можете использовать свое воображение, чтобы создать что-то лучшее с помощью этой концепции.

Запуск функции перед сохранением

Что если мы хотим выполнить задачу до того, как документ будет сохранен в Couchbase? Это может быть выполнено с использованием предварительно зарезервированного метода, который поставляется вместе с Ottoman. Например, скажем, мы хотим изменить фамилию каждого, прежде чем он будет сохранен:

UserModel.pre("save", function(next) {
    this.lastname = "da Boss " + this.lastname;
    next();
});

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

Создание документа

Для создания документов нам нужно использовать встроенный метод сохранения Ottoman. С нашей моделью мы можем сделать что-то вроде этого:

var myUser = new UserModel({
    firstname: "Nic",
    lastname: "Raboy",
    email: "test@example.com"
});

myUser.save(function(error) {
    if(error) {
        console.log("An error happened -> " + JSON.stringify(error));
    }
    console.log("Save successful!");
});

Ключ будет сгенерирован, а затем документ сохранен в базе данных.

Чтение документов NoSQL

Чтение документов с Ottoman немного отличается, потому что мы можем делать разные типы чтения. Давайте разберем несколько сценариев использования.

Поиск всех документов

В NoSQL часто бывает трудно получить документы, когда вы не знаете идентификатор документа. Без создания представления или использования технологии N1QL от Couchbase вам не повезет. Вот альтернатива.

UserModel.find({}, function(error, result) {
    if(error) {
        console.log("An error happened -> " + JSON.stringify(error));
    }
    // Do something with the resulting Ottoman models
});

Выше будет найти все документы, которые были созданы с помощью пользовательской модели Ottoman.

Поиск конкретного документа

Вот еще один сценарий. Допустим, вы не хотите каждый документ, и вы не знаете идентификатор документа. Вы можете сделать запрос с Ottoman, расширив команду find .

UserModel.find({lastname: "Raboy"}, function(error, result) {
    if(error) {
        console.log("An error happened -> " + JSON.stringify(error));
    }
    // Do something with the resulting Ottoman model
});

Найти документ по идентификатору

Допустим, вы знаете идентификатор документа, который вы хотите. Вы можете получить османскую модель, запустив:

UserModel.getById("document-id-here", function(error, result) {
    if(error) {
        console.log("An error happened -> " + JSON.stringify(error));
    }
    // Do something with the resulting Ottoman model
});

Это похоже на использование только метода get из Node.js SDK, однако вместо данных JSON, которые у вас остались, вместо этого у вас есть полностью функциональная османская модель.

Обновление существующего документа

Обновление документов с помощью Ottoman может быть немного сложнее, потому что вы должны сначала загрузить документ, прежде чем пытаться манипулировать им. Что вы можете сделать, это найти конкретный документ по идентификатору, а затем выполнить команду сохранения следующим образом:

UserModel.getById("document-id-here", function(error, result) {
    if(error) {
        console.log("An error happened -> " + JSON.stringify(error));
    }
    result.firstname = "Nicolas",
    result.save(function(error) {
        if(error) {
            console.log("An error happened -> " + JSON.stringify(error));
        }
    });
});

В приведенном выше примере я сначала получил бы свою конкретную модель, изменил только ее имя, затем назвал save. Команда сохранения создаст или обновит, но это зависит от вас, чтобы привести к этой точке.

Удаление документа

Удаление документа будет работать аналогично обновлению документа с помощью Ottoman. Сначала вы должны загрузить документ, выполнив поиск, а затем вызвав функцию удаления . Простой пример этого можно увидеть ниже:

UserModel.getById("document-id-here", function(error, result) {
    if(error) {
        console.log("An error happened -> " + JSON.stringify(error));
    }
    result.remove(function(error) {
        if(error) {
            console.log("An error happened -> " + JSON.stringify(error));
        }
        console.log("Document was removed!");
    });
});

Вывод

Ottoman — отличный инструмент ODM для Couchbase, который моделирует наши объекты и прекрасно подходит для операций типа CRUD. Mongoose для MongoDB пытается быть похожим на Османского, как показано в статье на Scotch.io относительно Mongoose и MongoDB. Эта статья была призвана показать, как Ottoman так же прост, если не проще в использовании.