Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js model.save()的Backbone.js/express.js参数_Node.js_Backbone.js_Express - Fatal编程技术网

Node.js model.save()的Backbone.js/express.js参数

Node.js model.save()的Backbone.js/express.js参数,node.js,backbone.js,express,Node.js,Backbone.js,Express,我在客户端使用Backbone.js,在后端使用node.js,在执行“有限”模型保存时遇到了一些问题,如下所述: 如示例中所示,如果我这样做 book.save({author: "Teddy"}); 如何使用express.js访问save的参数,即我只想保存到“author”字段?我试过以下方法 req.body -> gives ALL parameters of the model being saved, I want only the 'author' field req.

我在客户端使用Backbone.js,在后端使用node.js,在执行“有限”模型保存时遇到了一些问题,如下所述:

如示例中所示,如果我这样做

book.save({author: "Teddy"});
如何使用express.js访问save的参数,即我只想保存到“author”字段?我试过以下方法

req.body -> gives ALL parameters of the model being saved, I want only the 'author' field
req.query -> empty
非常感谢任何帮助

如中所述:

保存模型。保存([属性],[选项])
[…]属性散列(如集合中所示)应包含要更改的属性- 未提及的键不会被更改-但是,完成 资源的表示形式将发送到服务器

但是,您可以覆盖保存方法,并通过将发送到服务器而不是完整模型表示的选项提供
数据
属性。例如,这将仅保存传递给方法的属性:

var M = Backbone.Model.extend({   
    save: function (attrs, options) {
        options || (options = {});

        options.contentType = 'application/json';
        options.data = JSON.stringify(attrs);

        Backbone.Model.prototype.save.call(this, attrs, options);
    }
});
和小提琴


正如@mikebridge在评论中指出的,现在可以通过传递
attrs
选项来获得此行为。所以要么使用

book.save(null, {
    attrs: {author: "Teddy"}
});
还是保持超控

var M = Backbone.Model.extend({
    url: '/echo/json/',

    save: function(attrs, options) {
        options || (options = {});      
        options.attrs = attrs;
        Backbone.Model.prototype.save.call(this, attrs, options);
    }
});



如果您使用的是支持它的主干版本(>=0.9.9),并且您的服务器理解这个动词,那么您也可以发送补丁请求,因为我发现访问POST参数的最佳方法是使用bodyParser中间件。这是在本问题中提到的:


在当前版本的主干网(1.1.0)中,您还可以执行一个
补丁
,它只将更改的属性发送到服务器

如果您只希望将更改的属性发送到服务器,请调用
model.save(attrs,{patch:true})
。您将获得一个到服务器的HTTP补丁请求,其中只包含传入的属性

摘自这里:

在您的情况下,这将是:

book.save("author", "Teddy", {patch: true});

谢谢@nikoshr,我看到了,但我认为有一种方法可以通过其他方式访问参数键。。。非常感谢!这真的很有帮助。我将此方法命名为另一个方法名称,以便用户可以调用此方法,并保留正常保存。如果您的服务器支持此方法,你可以做一个
补丁
——看我的,我想你现在可以通过将行设置
options.contentType=…
options.data=…
替换为一行来实现这一点:
options.attr=attrs
。这个值在Backbone.sync中使用,它隐式地处理内容类型。@mikebridge感谢您指出这一点,我将它添加到了我的answerThank@bsorbo中,我遇到的问题是如何在服务器端(express.js)知道哪些字段已被选择由客户端(Backbone.js)更新,如果我只想更新某些字段,而不是全部字段。
book.save("author", "Teddy", {patch: true});