EmberJS 和自定义端点 url
EmberJS and custom endpoints urls
我在前端使用 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 中定义自定义端点?真的查了文档,什么都没有
请停止
这里有几种不同的选择。您可以覆盖每个不同的 URL-building 方法以始终附加 .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 也会根据正在发送的 header 进行内容协商。这意味着您根本不必将 .json
附加到 URL。
Ember 使用 JSONAPI 适配器的数据将发送 JSON API header application/vnd.api+json
,而不是Rails 期望进行内容协商的常规 application/json
。您可以通过执行 Mime::Type.register 'application/vnd.api+json', :json
的初始化程序将 header 添加到 Rails。这告诉 Rails,当请求与 header 一起出现时,它应该将其解释为 JSON。
您可以为应用中的每个模型定义不同的适配器。只需使用 'ember new adapter modelname' 创建一个共享型号名称的适配器。如果模型没有自己的适配器,它将使用应用程序适配器中的任何内容。
通读指南的自定义适配器部分。它描述了此功能以及您可能需要的更多信息:https://guides.emberjs.com/v2.14.0/models/customizing-adapters/
我在前端使用 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 中定义自定义端点?真的查了文档,什么都没有
请停止
这里有几种不同的选择。您可以覆盖每个不同的 URL-building 方法以始终附加 .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 也会根据正在发送的 header 进行内容协商。这意味着您根本不必将 .json
附加到 URL。
Ember 使用 JSONAPI 适配器的数据将发送 JSON API header application/vnd.api+json
,而不是Rails 期望进行内容协商的常规 application/json
。您可以通过执行 Mime::Type.register 'application/vnd.api+json', :json
的初始化程序将 header 添加到 Rails。这告诉 Rails,当请求与 header 一起出现时,它应该将其解释为 JSON。
您可以为应用中的每个模型定义不同的适配器。只需使用 'ember new adapter modelname' 创建一个共享型号名称的适配器。如果模型没有自己的适配器,它将使用应用程序适配器中的任何内容。
通读指南的自定义适配器部分。它描述了此功能以及您可能需要的更多信息:https://guides.emberjs.com/v2.14.0/models/customizing-adapters/