我在客户端使用 Backbone.js,在后端使用 node.js,我在进行“有限”模型保存时遇到了一些麻烦,如下所述:http://backbonejs.org/#Model-save
如示例所示,如果我这样做
book.save({author: "Teddy"});
如何使用 express.js 访问保存的参数,即我只想保存到“作者”字段的事实?我试过以下方法
req.body -> gives ALL parameters of the model being saved, I want only the 'author' field
req.query -> empty
非常感谢任何帮助!
最佳答案
如 Model.save documentation 中所述:
save model.save([attributes], [options])
[...] The attributes hash (as in set) should contain the attributes you'd like to change — keys that aren't mentioned won't be altered — but, a complete representation of the resource will be sent to the server.
但是,您可以覆盖保存方法并通过选项提供 data
属性,该属性将被发送到服务器而不是完整的模型表示。例如,这将只保存传递给方法的属性:
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);
}
});
还有一把 fiddle http://jsfiddle.net/dLFgD/
正如@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);
}
});
http://jsfiddle.net/nikoshr/dLFgD/7/
如果您使用的是支持它的 Backbone 版本 (>=0.9.9) 并且您的服务器理解该动词,则您也可以发送 PATCH 请求,如 explained in @pkyeck's answer
关于node.js - model.save() 的 Backbone.js/express.js 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11522286/