我在客户端上使用Backbone.js,在后端使用node.js,我在执行“有限”模型保存时遇到了一些麻烦,如下所述:http://backbonejs.org/#Model-save
如示例所示,如果我
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
任何帮助非常感谢!
答案 0 :(得分:12)
保存 model.save([attributes],[options])
[...]属性hash(如set中所示)应包含您要更改的属性 - 未提及的密钥不会被更改 - 但完成 资源的表示将被发送到服务器。
但是,您可以覆盖保存方法,并通过将发送到服务器而不是完整模型表示的选项提供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);
}
});
正如@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)并且您的服务器将该动词理解为explained in @pkyeck's answer
,您也可以发送PATCH请求答案 1 :(得分:3)
使用当前版本的Backbone(1.1.0),您还可以执行PATCH
,它只会将更改的属性发送到服务器。
相反,如果您只想将更改后的属性发送到服务器,请致电
model.save(attrs, {patch: true})
。只有传入的属性,您将收到服务器的HTTP PATCH请求。
取自此处:http://backbonejs.org/#Model-save
在你的情况下,这将是:
book.save("author", "Teddy", {patch: true});
答案 2 :(得分:0)
我发现访问POST参数的最佳方法是使用bodyParser中间件。这个问题引用了这个问题:How to retrieve POST query parameters?
/* 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.
...
});