2015-08-05 5 views
1

Я пытаюсь сохранить (разместить) модель Backbone с помощью model.save().backbone 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(); 
}, 

Я хотел бы ожидать мой узел/курьерскую маршрутизатор на сервере, который использует «тело промежуточного слоя -parser ', чтобы получить атрибуты модели на объекте экспресс-запроса.body, например:

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

объект response.body пуст.

Когда я использую правильную форму HTML с методом = «пост», как так:

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

все работает, как ожидалось.

Я боролся с этим весь день и не вижу, что я делаю неправильно.

Я не понял всю концепцию Backbone.model.save() или есть другой объект в объекте экспресс-запроса, который сохраняет атрибуты моей модели Backbone при сохранении?

ответ

1

По умолчанию, HTML <form> посылает application/x-www-form-urlencoded данные и не JSON, как Backbone.sync() не делает (который используется .save() внутри).

Откройте инструменты разработчика и просмотрите сетевой анализ при сохранении модели, чтобы убедиться, что требует (JSON Body, URL, ...).

Однако, поскольку ваши обратные обработчики корректно формируют данные, я предполагаю, что ваше промежуточное программное обеспечение не настроено так, как вы этого хотите.

+1

Thx для вашего ответа. Это привело меня в правильном направлении. Мой body-parser был настроен на использование кодировки url (app.use (bodyParser.urlencoded ({extended: true));) вместо json (app.use (bodyParser.json();). Недостаток опыта с промежуточным программным обеспечением никогда не заставлял меня думать об этой возможности. Thx снова. –