我正在使用Emberjs版本2.14.2 for Frontend,并且我拥有Rails API后端。我想从后端获取一些数据,但自动生成的URL与我的API端点不同。
区别是:emberjs生成/admins/api/v1/域,但我的终点实际上是/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
您在这里有几个不同的选项。您可以覆盖每种不同的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
附加到您的URL。
带有JSONAPIADAPTER的Ember数据将发送JSON API标头application/vnd.api+json
,而不是Rails希望进行其内容谈判的常规application/json
。您可以通过执行Mime::Type.register 'application/vnd.api+json', :json
的初始化器将其添加到导轨中。这告诉Rails,当该标头提出请求时,它应该将其解释为JSON。
您可以为应用程序中的每个模型定义不同的适配器。只需创建一个适配器,该适配器使用" Ember New Adapter ModelName"共享模型名称。如果模型没有自己的适配器,它将使用应用程序适配器中的任何内容。
读取指南的自定义适配器部分。它描述了此功能以及您可能需要的更多信息:https://guides.emberjs.com/v2.14.0/models/customizing-adapters/