2017-09-10 1 views
0

私はEmberJSバージョン2.14.2のフロントエンドで作業していますが、私はRails APIバックエンドを持っています。 バックエンドからデータを取得したいのですが、自動生成されたURLはAPIのエンドポイントとは異なります。EmberJSとカスタムエンドポイントURL

違いがある:emberJSは/管理者/ API/V1 /ドメインを生成しますが、私のエンドポイントは、私がEmberJSでこれをachiveできる方法

/admins/api/v1/domains.json実際にありますか?いくつかのモデルで全く異なるエンドポイントを定義するにはどうすればよいですか?

私のアダプタ:

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でカスタムエンドポイントを定義することは可能ですか?私は実際にドキュメントをチェックし、そこには何もありません。

plzハーフ

答えて

1

ここではいくつかのオプションがあります。あなたはいつも.jsonを追加するために、異なるURLの構築方法のそれぞれをオーバーライドすることができ、またはあなたは、アダプタのbuildURLメソッドをオーバーライドthis._super(...arguments)を呼び出し、そして得られたURLに.jsonを追加することができます

import DS from 'ember-data'; 

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

しかし、Railsはコンテンツネゴシエーションをベースありません送信されているヘッダーにも表示されます。つまり、URLには.jsonを追加する必要はありません。

JSONAPIAdapterを使用するEmber Dataは、JSON APIヘッダーapplication/vnd.api+jsonを送信しますが、Railsがコンテンツネゴシエーションを実行することを期待している通常のapplication/jsonは送信しません。 Mime::Type.register 'application/vnd.api+json', :jsonのイニシャライザを使ってそのヘッダをRailsに追加することができます。これは、Railsに、そのヘッダでリクエストが来たときにJSONとして解釈する必要があることをRailsに伝えます。

0

アプリ内のモデルごとに異なるアダプタを定義できます。 'ember new adapter modelname'を使用してモデル名を共有するアダプタを作成するだけです。モデルに独自のアダプターがない場合は、アプリケーション・アダプターにあるものを使用します。

ガイドの「アダプターのカスタマイズ」のセクションを読んでください。この機能について説明し、おそらく必要な情報をもっと詳しく示します:https://guides.emberjs.com/v2.14.0/models/customizing-adapters/