Ember.js模型保存不向服务器发送任何数据

时间:2016-04-03 15:28:53

标签: javascript node.js express ember.js ember-data

我目前正在使用Ember.JS和NodeJS与Express构建一个小型演示应用。我已经敲了一个简单的模型并创建了一个保存它的动作。

该组件有一个名为recipe的属性,它是我定义的模型的一个实例。保存操作非常简单:

save() {
  this.get('recipe').save();
}

查看Chrome开发工具中的网络标签,我可以看到请求有效负载中的数据。但是,我无法访问我的Node应用程序中的数据。我已经记录了完整的req对象,而我的数据并不在任何地方。

我觉得这与Ember使用PATCH动词这一事实有关,而我希望它能使用PUT或POST。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

免责声明:如果没有看到代码,很难给出明确的答案。

JSON API规范定义了使用PATCH动词更新资源。 (http://jsonapi.org/format/#crud-updating

如果您选择使用此适配器,则必须在Express应用中定义适当的路线。没有看到它,我建议用相同的回调定义PUT和PATCH的路由,你就没事了。

例如:

router.put('/:id', controller.update);
router.patch('/:id', controller.update);

现在,覆盖适配器中的HTTP谓词并不容易(Ember Data 2.4)。可能的头部是覆盖适配器的updateRecord方法。 (https://github.com/emberjs/data/blob/v2.4.0/addon/adapters/json-api.js#L115-L133

答案 1 :(得分:1)

免责声明:如果没有看到代码,很难给出明确的答案。

您没有收到请求有效内容,因为'Content-Type'标头未正确设置。

Ember的JSONAPIAdapter发送'Content-Type'标头设置为'application/vnd.api+json'的请求。你需要在body-parser中设置它,如下所示:

app.use(bodyParser.json({ type: 'application/vnd.api+json' }));

答案 2 :(得分:0)

最后,我使用DS.RESTAdapter而不是DS.JSONAPIAdapter来解决问题。在RESTAdapter使用PUT时保存记录时,JSONAPIAdapter会使用PATCH。我怀疑在Ember或Express中实现PATCH时存在一些问题。