在我的Rails API中,我使用的是默认情况下Ember期望的JSONAPI结构。
我有一个Rails路由http://localhost:3000/profile
,它将返回当前登录的用户JSON。
如何向Emberjs中的/profile
端点发出仲裁请求,以便我可以在路由器的model()钩子中获取登录用户的JSON?
我在这里尝试了这个指南:
https://guides.emberjs.com/v2.10.0/models/finding-records/
并且有这段代码:
return this.get('store').query('user', {
filter: {
email: 'jim@gmail.com'
}
}).then(function(users) {
return users.get("firstObject");
});
然而,它返回了错误的用户。似乎“电子邮件”的价值无关紧要,我可以将其传递给'泥',它将返回我数据库中的所有用户。
我是否无法在Ember的个人资料路线的我的model()钩子中对/ profile进行简单的GET请求?
我注意到Ember中的过滤器实际上只是将一个查询参数附加到请求URL的末尾。
因此,使用我的上述过滤器,就像提出请求一样:
GET http://localhost:3000/users?filter['email']=jim@gmail.com
这没有用,因为我的Rails对过滤器查询参数一无所知。
我希望Ember会自动找到用户并做一些黑魔法来过滤用户以匹配我的电子邮件地址,而不是我必须在我的Rails API中手动构建额外的逻辑来查找单个记录。
Hurrmmmmmmm ......确实感觉我此刻正在与Ember的惯例作斗争。
感谢Lux,我终于使用了以下方法:
步骤1 - 生成用户适配器:
ember generate adapter user
步骤2 - 在用户适配器的queryRecord方法覆盖中编写AJAX请求
import ApplicationAdapter from './application';
import Ember from 'ember';
export default ApplicationAdapter.extend({
apiManager: Ember.inject.service(),
queryRecord: function(store, type, query) {
if(query.profile) {
return Ember.RSVP.resolve(
Ember.$.ajax({
type: "GET",
url: this.get('apiManager').requestURL('profile'),
dataType: 'json',
headers: {"Authorization": "Bearer " + localStorage.jwt}
})
);
}
}
});
步骤3 - 像这样发出model()
挂钩请求:
import Ember from 'ember';
export default Ember.Route.extend({
model() {
return this.get('store').queryRecord('user', {profile: true});
}
});