javascript - 主干模型——扩展api调用

标签 javascript node.js backbone.js express

我正在开发我的第一个 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/

相关文章:

node.js - 使用 Nodejs + ffmpeg 或 handbrake 编码视频

.net - 如何将 .NET 代码连接到 node red 平台

javascript - Backbone.js Collection 过滤器前 10 个模型

javascript - 防止闭包重命名对象键

javascript - 在另一个调用正在使用 php (Laravel) 执行长时间作业时创建一个 ajax

node.js - React Native项目中npm install时package.json路径错误

backbone.js - 在 Backbone 集合中添加模型后自动排序

javascript - 有没有办法 console.log Backbone Marionette ItemView 中发生的所有事件

php - 启用复选框时禁用 <select>

javascript - 在 JavaScript 中使用微秒精度的日期范围