【问题标题】:EmberJS and custom endpoints urlsEmberJS 和自定义端点 url
【发布时间】:2017-09-11 06:23:52
【问题描述】:

我正在为前端使用 EmberJS 版本 2.14.2,并且我有 Rails API 后端。 我想从后端获取一些数据,但自动生成的 url 与我的 API 端点不同。

不同之处在于:emberJS 生成 /admins/api/v1/domains 但我的端点实际上是 /admins/api/v1/domains.json

如何在 EmberJS 中实现这一点?如何为某些模型定义完全不同的端点?

我的适配器:

import DS from 'ember-data';

export default DS.JSONAPIAdapter.extend({
  host: 'http://localhost:4000',
  namespace: 'admins/api/v1',
  session: Ember.inject.service('session'),

  headers: Ember.computed('session.access_token', function() {
    return {
      'Authorization': "Bearer " + this.get('session.access_token')
    };
  })
});

我的模特:

import DS from 'ember-data';

export default DS.Model.extend({
  host: DS.attr(), 
  layout: DS.attr(), 
  token: DS.attr(), 
  created_at: DS.attr(), 
  updated_at: DS.attr()
});

是否可以在 EmberJS 中定义自定义端点?我真的检查了文档,那里什么都没有。

请停止

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    您有几个不同的选择。您可以覆盖每个不同的 URL 构建方法以始终附加 .json,或者您可以覆盖适配器的 buildURL 方法,调用 this._super(...arguments),并将 .json 附加到生成的 URL:

    import DS from 'ember-data';
    
    export default DS.JSONAPIAdapter.extend({
      buildURL: function() {
        const url = this._super(...arguments);
        return `${url}.json`;
      }
    });
    

    但是,Rails 也会根据正在发送的标头进行内容协商。这意味着您根本不必将.json 附加到您的网址。

    带有 JSONAPIAdapter 的 Ember Data 将发送 JSON API 标头 application/vnd.api+json,而不是 Rails 期望进行内容协商的常规 application/json。您可以通过 Mime::Type.register 'application/vnd.api+json', :json 的初始化程序将该标头添加到 Rails。这告诉 Rails,当请求带有该标头时,它应该将其解释为 JSON。

    【讨论】:

      【解决方案2】:

      您可以为应用中的每个模型定义不同的适配器。只需使用“ember new adapter modelname”创建一个共享模型名称的适配器。如果模型没有自己的适配器,它将使用应用程序适配器中的任何内容。

      阅读指南的自定义适配器部分。它描述了此功能以及您可能需要的更多信息:https://guides.emberjs.com/v2.14.0/models/customizing-adapters/

      【讨论】:

        猜你喜欢
        • 2018-08-19
        • 1970-01-01
        • 2019-10-03
        • 2015-08-26
        • 1970-01-01
        • 2018-01-20
        • 2014-07-11
        • 2019-04-07
        • 2018-09-02
        相关资源
        最近更新 更多