Что такое эквивалент ActiveRecord в мире node.js?
Я рассматриваю возможность использования инструментов node.js
для предстоящего проекта, для обучения и повышения производительности. Например, некоторые модели в Rails:
class User
has_many :topics
has_many :friends
has_many :friend_users, :through => :friends
has_many :friend_topics, :through => :friend_users, :source => :topics
end
class Friend
belongs_to :user
belongs_to :friend_user, :class_name => "User",
:foreign_key => :phone_no, :primary_key => :phone_no
end
class Topic
belongs_to :user
end
позволяет использовать элегантный код запроса:
latest_10_topics_from_friends = current_user.friend_topics.limit(10)
и генерирует оптимизированные SQL-запросы. Есть ли что-то подобное в экосистеме node.js
?
Ответы
Ответ 1
Обновленный ответ
Используйте sequelize
Старый ответ:
Посмотрите на проект Tower. Вы можете определить свои модели следующим образом:
# app/models/user.coffee
class App.User extends Tower.Model
@belongsTo "author", type: "User"
@belongsTo "commentable", polymorphic: true
@has_many "topics"
@has_many "friends"
@has_many "friend_users", through: "friends"
@has_many "friend_topics", through: "friends_users", source: "topics"
# app/models/friend.coffee
class App.Friend extends Tower.Model
@belongs_to "user"
@belongs_to "friend_user", type: "User",
foreign_key: "phone_no", primary_key: "phone_no"
# app/models/topic.coffee
class App.Topic extends Tower.Model
@belongs_to "user"
Теперь вы сможете запросить свои данные как
current_user.friend_topics().limit(10)
Ответ 2
Ватерлиния - это то, что вы ищете. Он был создан теми же парнями за проектом Sails.
https://github.com/balderdashy/waterline
Ответ 3
Если вы используете MySql, вы можете попробовать Sequelize.js.
Трудно достичь количества функций, которые предлагает ActiveRecord, но тем не менее я работал с Sequelize и его хорошим решением для Node.js
Есть несколько других ORM-решений для другой БД, вы можете проверить их здесь http://search.npmjs.org/
Ответ 4
mongoose, вероятно, является самой близкой аналогией, хотя для хранилища документов не существует реляционных db-подобных рельсов/активной записи