model.save()的Backbone.js / express.js参数
我在客户端上使用了Backbone.js,在后端上使用了node.js,我在做一个“有限的”模型保存时遇到了一些麻烦,如下所示: http : //backbonejs.org/#Model-保存
正如在例子中,如果我这样做
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文档中所述 :
保存 model.save([attributes],[options])
[…]属性哈希值(如在集合中)应该包含您想要更改的属性 – 未提及的密钥不会被更改 – 但是, 资源的完整表示将被发送到服务器。
但是,您可以覆盖保存方法,并通过将发送到服务器的选项提供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); } });
和小提琴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请求,如@ pkyeck的答案中所述
与当前版本的骨干(1.1.0),你也可以做一个PATCH
,只发送更改的属性到服务器。
相反,如果您只想将已更改的属性发送到服务器,请调用
model.save(attrs, {patch: true})
。 您将只通过传入的属性获得HTTP PATCH请求到服务器。
从这里取: http : //backbonejs.org/#Model-save
在你的情况下,这将是:
book.save("author", "Teddy", {patch: true});
我发现访问POST参数的最好方法是使用bodyParser中间件。 这是在这个问题引用: 如何检索POST查询参数?
/* On startup, register the bodyParser middleware */ app.use(express.bodyParser()); /* Then, during route execution, each parameter can be accessed with req.param */ app.post('/author/:id', function(req, res) { var author = req.param('author', null); // Second parameter is default. ... });