我目前正在使用Ember.JS和NodeJS与Express构建一个小型演示应用。我已经敲了一个简单的模型并创建了一个保存它的动作。
该组件有一个名为recipe
的属性,它是我定义的模型的一个实例。保存操作非常简单:
save() {
this.get('recipe').save();
}
查看Chrome开发工具中的网络标签,我可以看到请求有效负载中的数据。但是,我无法访问我的Node应用程序中的数据。我已经记录了完整的req
对象,而我的数据并不在任何地方。
我觉得这与Ember使用PATCH动词这一事实有关,而我希望它能使用PUT或POST。
非常感谢任何帮助。
答案 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
时存在一些问题。