1

model.save() を使用してバックボーン モデルを保存 (投稿) しようとしています。

モデル:

Backbone.Model.extend({
  urlRoot: '/project/',
  defaults: {
    projectname: "default projectname"
 }
});

モデルの保存 (Backbone.router オブジェクト内):

putTest: function(id) {
    var projectItem = new ProjectModel({projectname: "This shiny new project"});
    projectItem.save();
},

次のように、ミドルウェア「ボディパーサー」を使用するサーバー上のノード/エクスプレスルーターが、エクスプレス request.body オブジェクトでモデルの属性を取得することを期待します。

post: function(request, response) {
        console.log(request.body.projectname);
}

しかし、response.body オブジェクトは空です。

method="post" で通常の html フォームを使用している場合:

<form id =  "createProject"
  action    =  "/project/"
  method    =  "post" >
  <input type="text" name="projectName" value="Project name" />
</form>

すべてが期待どおりに機能しています。

私は一日中これに苦労しており、何が間違っているのかわかりません。

Backbone.model.save() の概念全体を誤解していますか?それとも、保存時にバックボーン モデルの属性を保持するエクスプレス リクエスト オブジェクトに別のオブジェクトがありますか?

4

1 に答える 1

1

デフォルトでは、HTML はデータを<form>送信application/x-www-form-urlencodedし、JSON のようには送信しません (内部Backbone.sync()で使用されます)。.save()

ブラウザーの開発者ツールを開き、モデルを保存するときにネットワーク分析を調べて、要求が正しく機能することを確認します (JSON 本文、URL など)。

ただし、バックエンドはフォーム データを正しく処理するため、ミドルウェアが希望どおりに構成されていないと思います。

于 2015-08-06T03:39:39.560 に答える