Подтвердить что ты не робот

Какой ORM для node.js?

Я знаю, что это общий вопрос, но я провел тесты, и мне нужны некоторые особенности!

Мне нужны функции:

  • свойства карты для имен столбцов
  • используйте имя таблицы, отличное от имени модели
  • поддержка мягких удалений (параноидальный режим при продолжении)
  • поддержка записи по времени (с возможностью указать для каждой другой модели имя столбца)
  • поддержка внешних ключей
  • должен поддерживать mysql и sqlite
  • архитектура должна поддерживать модель для каждого файла

Дополнительные функции:

  • кеш
  • (поддержка redis/memcache)
  • инструмент командной строки для генерации моделей из базы данных

Я тестировал:

  • node -orm
    • для обработки собственных имен столбцов вам необходимо обходное решение
    • мягкие удаления не поддерживаются и не могут поддерживаться даже при использовании внешнего плагина (я попытался написать один, используя hook раньше, но я могу "остановить" его от удаления записи)
    • не поддерживают модель для файла (вам нужно обходное решение)
  • sequelize
    • не создавать внешние ключи
    • невозможно сопоставить свойства с именами столбцов
    • поддержка модели для каждого файла, но она не работает очень хорошо (вам нужно установить отношения в файл, который включает в себя модели)
  • node -persist
    • Мне не нравится необходимость указывать экземпляр подключения для всего

Сейчас я собираюсь проверить JugglingDB и Bookshelf.js(но мне не нравится слишком много последнего).

4b9b3361

Ответ 1

Книжная полка должна в настоящее время поддерживать все эти функции:

  • Отображение столбцов в именах свойств с помощью format и parse.
  • Использование другого имени таблицы с помощью tableName.
  • Отметка времени может принимать пользовательские столбцы с hasTimestamp атрибут.
  • Внешние ключи могут быть определены с помощью knex построитель схем... они плохо документированы, но вы можете см. пример в тестах здесь
  • Поддержка mysql, sqlite и postgres
  • Определенно поддерживает одну модель на файл... отношения определены в методах, поэтому вы можете сделать:

    var Classroom = Bookshelf.Model.extend({
      tableName: 'classrooms',
      student: function() {
        // Relating to a model from a file in the same directory.
        return this.hasMany(require('./student'));
      }
    });
    
    new Classroom({id: 1})
      .fetch({withRelated: ['students'])
      .then(function(classroom) {
         console.log(JSON.stringify(classroom));
      });
    

Официальная поддержка мягкого удаления находится в работе, но, безусловно, легко достигается путем расширения модели и предоставления нового метода уничтожения следующим образом:

destroy: function(options) {
   if (options.softDelete) {
     return this.save({'deleted_at': new Date});
   }
   return bookshelf.Model.prototype.destroy.call(this, arguments);
}

Он еще не зацепился за кеш, потому что недействительность кэша при отношениях довольно сложная, определенно что-то рассматривается.

Если вы видите что-то, что кажется отсутствующим, не стесняйтесь открывать билет.

Ответ 2

Вы можете взглянуть на свет: https://github.com/knyga/light-orm Простая ORM. Не создавайте внешние ключи. Невозможно сопоставить свойства с именами столбцов. Но может быть связано с любыми rdbms и супер просто.