【发布时间】:2018-03-07 16:34:00
【问题描述】:
我来自 Ruby 世界,开始学习 Express js,Node/ExpressJs 中是否有 Rails ActiveRecord Migrations 类库?
【问题讨论】:
标签: node.js express activerecord database-migration
我来自 Ruby 世界,开始学习 Express js,Node/ExpressJs 中是否有 Rails ActiveRecord Migrations 类库?
【问题讨论】:
标签: node.js express activerecord database-migration
我是 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(这很困难,但完成了工作)。
【讨论】:
我觉得你应该用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(时间戳),您可以进行如下调用那:
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%';
【讨论】:
通过快速的 Google 搜索,我找到了四个不同的包/库,您可以尝试:
【讨论】:
我认为您可以使用 Sequelize,它确实受到 ActiveRecord 的启发。也许你也需要使用 Migrat 包,它看起来是一个非常好的迁移工具
【讨论】: