骨干模型 – 扩展API调用

我正在做我的第一个nodejs / backbone项目。 我需要做的是用其他方法扩展用户模型API。 由于REST使用通用的post / get / put请求,你如何扩展骨干模型与其他API调用(即阻止用户帐户,我不想更新用户和使/用户/停用url)?

我可以采取丑陋的路线,但我从专业人士寻找“正确的方式”。

我的骨干模型

define(["jquery", "backbone"], function($, Backbone) { var User = Backbone.Model.extend({ urlRoot: '/user', defaults: { username: '', password: '', email: '' } }); return User; } ); 

我的nodejs“路由器”

  app.put('/user', userController.register); app.post('/user', userController.update); app.get('/user', userController.list); app.delete('/user', userController.delete); 

为什么不添加块和停用属性到你的模型,然后只使用标准的REST / CRUD API调用。

那么你的动作阻塞和停用只是标准的模型更新,用逻辑来处理你的API方法中阻塞和活动的模型状态。

 define(["jquery", "backbone"], function($, Backbone) { var User = Backbone.Model.extend({ urlRoot: '/user', defaults: { username: '', password: '', email: '', blocked: false, active: true }, block: function () { this.set('blocked', true); this.save(); }, deactivate: function () { this.set('active', false); this.save(); }, }); return User; } ); 

编辑 – 根据你的评论,需要区分更新

如果您需要区分服务器上的字段更新,以便运行特定的路由validation。 那么你可能需要为每个特定的动作调用自定义路由。 这样做的一个简单的方法是在保存模型的过程中覆盖url。

更新的模型示例。

 define(["jquery", "backbone"], function($, Backbone) { var User = Backbone.Model.extend({ urlRoot: '/user', defaults: { username: '', password: '', email: '', blocked: false, active: true }, block: function () { this.set('blocked', true); this.save(this, { url: '/user/block' }); }, deactivate: function () { this.set('active', false); this.save(this, { url: '/user/deactivate' }); }, }); return User; } ); 

那么你将有以下路线

 app.put('/user', userController.register); app.post('/user', userController.update); app.get('/user', userController.list); app.delete('/user', userController.delete); app.post('/user/block', userController.block); app.post('/user/deactivate', userController.deactivate);