我正在开发我的第一个nodejs / backbone项目。我需要做的是使用其他方法扩展用户模型api。由于REST使用通用post / get / put请求,如何使用其他api调用扩展主干模型(即阻止用户帐户,我不想更新用户和make / user / deactivate url)?
我可以采取丑陋的路线,但我寻找专业人士的“正确方法”。
我的骨干模型
define(["jquery", "backbone"],
function($, Backbone) {
var User = Backbone.Model.extend({
urlRoot: '/user',
defaults: {
username: '',
password: '',
email: ''
}
});
return User;
}
);
我的nodejs“router”
app.put('/user', userController.register);
app.post('/user', userController.update);
app.get('/user', userController.list);
app.delete('/user', userController.delete);
答案 0 :(得分:2)
为什么不向模型添加阻止和停用属性,然后只使用标准的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;
}
);
编辑 - 根据您的评论,需要区分更新
如果您需要区分服务器上的字段更新,以便运行路由特定验证,例如。然后,您可能需要为每个特定操作调用自定义路由。这样做的一种巧妙方法是在保存模型的调用期间覆盖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);