【问题标题】:Rails ActiveRecord Migrations similar in Node/ExpressJs在 Node/ExpressJs 中类似的 Rails ActiveRecord 迁移
【发布时间】:2018-03-07 16:34:00
【问题描述】:

我来自 Ruby 世界,开始学习 Express js,Node/ExpressJs 中是否有 Rails ActiveRecord Migrations 类库?

【问题讨论】:

    标签: node.js express activerecord database-migration


    【解决方案1】:

    我是 Ruby on Rails 开发人员,我在 Node.js 上寻找类似的框架。

    现在我正在使用带有 Waterline 的 Sails.js、使用 PostgreSQL 和迁移库。
    文件结构与 Rails 中的几乎相同。几乎与 ActiveRecord 相同。我对我目前的设置非常满意,工作完美且速度极快。

    我有 500 个功能测试。每个测试都有许多查询,运行 10-20 个具有许多更新、创建、查找查询的类。使用 Rails 和 PG 数据库,它们将在 10 分钟内运行。使用 Sails 和 PG 数据库,它们确实在 2 分钟内运行(或更长时间 - 我有这个设置)。使用 Sails 和 MongoDB(我刚刚从 pg 迁移到 mongo)相同的测试在 12 秒内运行!

    而且我还有类似 Rails 的文件系统和 Waterline,它类似于 ActiveRecord。我已将所有事务移至 Redis(这很困难,但完成了工作)。

    【讨论】:

      【解决方案2】:

      我觉得你应该用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_atupdated_at(时间戳),您可以进行如下调用那:

      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%';

      【讨论】:

        【解决方案3】:

        通过快速的 Google 搜索,我找到了四个不同的包/库,您可以尝试:

        【讨论】:

          【解决方案4】:

          我认为您可以使用 Sequelize,它确实受到 ActiveRecord 的启发。也许你也需要使用 Migrat 包,它看起来是一个非常好的迁移工具

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-11-18
            • 2019-11-30
            • 2016-02-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-19
            • 2020-10-20
            相关资源
            最近更新 更多