0

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

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

console.log(req.body) 的结果;在我的节点控制器显示里面......

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

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

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

我怎样才能得到 node.save(); 发布与常规 HTML 相同的 JSON 的函数?

4

1 回答 1

1

看起来您已将 Backbone 配置为模拟 JSON

模拟JSON Backbone.emulateJSON = true

如果您正在使用无法处理编码为 的请求的旧版 Web 服务器,则application/json设置Backbone.emulateJSON = true;将导致 JSON 在model参数下被序列化,并使用 mime 类型发出请求application/x-www-form-urlencoded,就像来自 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:业务就会消失。

于 2012-10-22T15:44:21.550 回答