我正在开发我的第一个 Nodejs/backbone 项目。我需要做的是用额外的方法扩展用户模型 api。由于 REST 使用通用的 post/get/put 请求,如何通过其他 api 调用扩展主干模型(即阻止我不想更新用户并创建/user/deactivate url 的用户帐户)?
我可以走丑陋的路线,但我从专业人士那里寻找“正确的方法”。
我的 Backbone 模型
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;
}
);
编辑 - 根据您的评论,需要区分更新
如果您需要区分服务器上的字段更新,例如为了运行特定于路由的验证。然后您可能需要为每个特定操作调用自定义路由。一个巧妙的方法是在调用期间覆盖 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);
关于javascript - 主干模型——扩展api调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21235501/