Rails ActiveRecord Migrations похож на Node/ExpressJs

Я из мира Ruby, начал изучать Express js, есть ли Rails ActiveRecord Migrations тип библиотеки в Node/ExpressJs?

Ответ 1

Я думаю, вы можете использовать Sequelize, который действительно вдохновлен ActiveRecord. Возможно, вам также понадобится использовать пакет Migrat, который выглядит как действительно хороший инструмент миграции

Ответ 3

Я думаю, вы должны использовать Sequelize, синтаксис очень прост и кривая учится быстро. Вот те же самые образцы того, как определить модель в sequelize:

const User = sequelize.define('user', {
  username: { type: Sequelize.STRING, allowNull: false },
  password: { type: Sequelize.STRING, allowNull: false },
  admin: { type: Sequelize.BOOLEAN, defaultValue: false }
});

После того, как вы вызовете свой код, метод sync() Sequelize будет CREATE TABLE IF NOT EXISTS все ваши модели, добавляющие id (который вы также можете изменить), created_at и updated_at (timestamps), и вы можете делать такие звонки:

sequelize.sync()
  .then(() => User.create({
    username: 'administrator',
    password: 'yahoo',
    admin: true
  }))
  .then(userCreated => {
    console.log(userCreated.toJSON());
  });

Вы можете создавать очень сложные запросы с небольшим кодом и смешивать их с express.js для ответа на ваши клиенты, например:

User.findAll({
  where: {
    [Op.iLike] : { username: 'Jack%' },
    admin: true
  }
 }).then(usersList => {
   if (!usersList) { 
     response.status(404).json({ error: 'not found' }); 
     return null; 
   }

   for (var i = 0; i < usersList.length; i++) {
    usersList[I].something = 42;
   }

   response.json(usersList);

   return null;
 });

Это произведет что-то вроде: SELECT "id", "username", "password", "admin", "created_at", "updated_at" WHERE "admin" = true AND "username" ILIKE 'Jack%';

Ответ 4

Я разработчик Ruby on Rails, и я искал аналогичную структуру на Node.js.

Теперь я использую Sails.js с Waterline, используя PostgreSQL, с библиотекой миграций.
Структура файла почти такая же, как в Rails. Почти так же, как с ActiveRecord. Я очень доволен своей текущей настройкой, прекрасно работает и быстро пылает.

У меня 500 функциональных тестов. Каждый тест имеет много запросов, проходит через 10-20 кланов с множеством обновлений, создания, поиска запросов. С Rails и базой данных PG они будут работать через 10 минут. В базе данных Sails и PG они выполнялись через 2 минуты (или более - у меня была эта настройка). С Sails и MongoDB (я только что перешел с pg на mongo) те же тесты запускаются за 12 секунд!

И у меня все еще есть Rails-подобная файловая система и Waterline, которая похожа на ActiveRecord. Все транзакции, которые я переместил в Redis (это было сложно, но выполняли эту работу).