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

Ember.js model save sends no data to server

本文关键字:服务器 数据 js 模型 保存 Ember      更新时间:2023-12-20

我目前正在使用Ember.JS和NodeJS with Express构建一个小型演示应用程序。我已经建立了一个简单的模型,并创建了一个操作来保存它。

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

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

在Chrome开发工具中查看我的网络选项卡,我可以看到请求负载中的数据。但是,我无法访问Node应用程序中的数据。我已经记录了完整的req对象,但我的数据不在那里。

我有一种感觉,这与Ember使用PATCH动词有关,而我希望它使用PUT或POST。

非常感谢您的帮助。

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

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

如果您选择使用此适配器,则必须在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)

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

由于未正确设置'Content-Type'标头,您没有收到请求负载。

Ember的JSONAPIAdapter发送具有设置为'application/vnd.api+json''Content-Type'报头的请求。你需要在body-parser中这样设置:

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

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