当我保存模型时,为什么骨干在{model:{model_property:value,...}}内发送模型信息

时间:2012-10-22 06:10:00

标签: javascript json node.js backbone.js mongoose

我正在使用node.js和backbone.js编写应用程序。但是,当我尝试保存模型时,它将模型的JSON嵌套在模型字典中。

node = new NodeModel({prop1:"value1", prop2:"value2"});
node.save();

console.log(req.body)的结果;在我的节点控制器show ...

{model: {"prop1":"value1", "prop2":"value2"} }

如果我使用标准的html表单将相同的节点控制器发布到console.log(req.body);节目...

{prop1:"value1", prop2:"value2"}

我如何获得node.save();函数发布常规HTML的相同JSON吗?

1 个答案:

答案 0 :(得分:1)

您似乎已将Backbone配置为emulate JSON

  

emulateJSON Backbone.emulateJSON = true

     

如果您正在使用无法处理编码为application/json的请求的旧版Web服务器,则设置Backbone.emulateJSON = true;将导致JSON在model参数下被序列化,并且请求使用application/x-www-form-urlencoded mime类型,就像来自HTML表单一样。

并且Backbone.sync的相应块看起来像这样:

if (!options.data && model && (method == 'create' || method == 'update')) {
  params.contentType = 'application/json';
  params.data = JSON.stringify(model.toJSON());
}
//...
if (Backbone.emulateJSON) {
  params.contentType = 'application/x-www-form-urlencoded';
  params.data = params.data ? {model: params.data} : {};
}

您可以在第一个model.toJSON()中看到if来电,第二个model:中会出现if前缀。你应该可以说

Backbone.emulateJSON = false;

在您的应用程序设置中的某个位置(在尝试同步任何内容之后加载Backbone之后),model:业务将会消失。