6

クライアントで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

どんな助けでも大歓迎です!

4

3 に答える 3

12

Model.saveのドキュメントに記載されているように:

save model.save([attributes]、[options])
[...]属性ハッシュ(セット内)には、変更する属性が含まれている必要があります—言及されていないキーは変更されません—しかし、リソースの完全な表現がサーバーに送信されます。

ただし、saveメソッドをオーバーライドし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/


attrsコメントで@mikebridgeが指摘しているように、この動作はオプションを渡すことで取得できるようになりました。したがって、どちらかを使用します

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/


@pkyeckの回答で説明されているように、PATCHリクエストをサポートするバックボーンバージョン(> = 0.9.9)を使用していて、サーバーがその動詞を理解している場合は、PATCHリクエストを送信することもできます。

于 2012-07-17T12:48:02.413 に答える
3

現在のバージョンのBackbone(1.1.0)ではPATCH、変更された属性のみをサーバーに送信することもできます。

代わりに、変更された属性のみをサーバーに送信する場合は、を呼び出します model.save(attrs, {patch: true})。渡された属性のみを使用して、サーバーへのHTTPPATCHリクエストを取得します。

ここから取得:http://backbonejs.org/#Model-save

あなたの場合、これは次のようになります。

book.save("author", "Teddy", {patch: true});
于 2014-02-11T10:08:33.187 に答える
0

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.
  ...
});
于 2012-07-21T17:00:29.743 に答える