EmberJS和自定义端点网址

时间:2017-09-10 09:17:11

标签: ember.js ember-data

我正在使用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中定义自定义端点?我真的检查了文档,那里什么都没有。

Plz halp

2 个答案:

答案 0 :(得分:1)

这里有几个不同的选择。您可以覆盖每种不同的网址构建方法,以便始终附加.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数据将发送JSON API标头application/vnd.api+json,而不是Rails期望进行内容协商的常规application/json。您可以通过执行Mime::Type.register 'application/vnd.api+json', :json的初始化程序将该标头添加到Rails。这告诉Rails当请求进入该标头时,它应该将其解释为JSON。

答案 1 :(得分:0)

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

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