我正在开发基于Angular,RESTful,Express的单页应用。为了管理数据库,我选择了node-orm2。我的数据模型类似于:
var User = db.define("user", {
name: String
});
var Order = db.define("order", {
type: String,
comment: String
}
// this line will produce methods: Order.getOwner(..), Order.setOwner(..), User.getOrders(..), User.addOrder(..)
Order.hasOne("owner", User, {reverse: 'orders'});
var Offer = db.define("offer",{
price: Number
});
// this line will produce methods: Offer.getOrder(..), Offer.setOrder(..), Order.getOffers(..), Order.addOffer(..)
Offer.hasOne("order", Order, {reverse: "offers"});
要从Angular fronted(使用$resource
)访问此模型,我为Express应用程序创建了RESTful处理程序:
router.route("/user/:user_id/orders").get(...).post(...)
router.route("/user/:user_id/orders/:order_id").get(...).delete(...)
router.route("/user/:user_id/orders/:order_id/offers").get(...).post(...)
router.route("/user/:user_id/orders/:order_id/offers/:offer_id").get(...).put(...)
之后我意识到数据模型定义和RESTful API实现之间存在明确的映射。
例如,如果我有Offer.hasOne("order", Order, ...)
我在/user/:user_id/orders/:order_id
下有提供操作的路径的子树。这个子树是标准的:
offers").post(...)
- 创建优惠; offers").get(...)
- 获取所有优惠; offers/:offer_id").get(...)
- 获得具体报价offers/:offer_id").put(...)
- 修改具体报价应该可以定义模型,而不仅仅是注册它们以由RESTful API处理。
这种情况是否有现有的框架?
更新
业务逻辑操作我将实现为带参数的PUT操作。