【问题标题】:Ember.js model save sends no data to serverEmber.js 模型保存不向服务器发送数据
【发布时间】:2016-04-03 15:28:53
【问题描述】:

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

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

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

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

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

非常感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

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

    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)

    【讨论】:

    • 我应该更清楚。我已经在我的 Express 应用程序中定义了 PATCH 和 PUT 路由,但是每当我将模型保存在我的 Ember 代码中时,req.body 对象都是空的。路由肯定被调用了,只是没有发送所需的数据。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-03
        • 2015-03-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多