我正在尝试从远程后端api获取数据。当我看医生的时候(https://guides.emberjs.com/v2.2.0/models/customizing-adapters/),"JSONAPIAdapter足够智能,可以根据模型的名称确定与其通信的URL。"所以我生成了Route、Model和Adapter。
这是适配器的代码:
//app/adapters/app.js
import Ember from 'ember';
import JSONAPIAdapter from 'ember-data/adapters/json-api';
import JSONAPISerializer from 'ember-data/serializers/json-api';
export default JSONAPIAdapter.extend({
ajax: Ember.inject.service(),
host: 'http://api.themoviedb.org/3/discover/movie',
headers: {
'API_KEY': '72b56103e43843412a992a8d64bf96e9'
},
pathForType: function(type) {
return Ember.String.underscore(type);
},
serializer: JSONAPISerializer.extend({
primaryKey: 'id',
serializeId: function(id) {
return id.toString();
}
})
});
模型的代码
//app/models/movie.js
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
// import { belongsTo, hasMany } from 'ember-data/relationships';
export default Model.extend({
poster_path: attr('string'),
adult: attr('boolean'),
overview: attr('string'),
release_date: attr('string'),
genre_ids: attr('array'),
original_title: attr('string'),
original_language: attr('string'),
title: attr('string'),
backdrop_path: attr('string'),
popularity: attr('number'),
vote_count: attr('number'),
video: attr('boolean'),
vote_average: attr('number')
});
应用程序的路由器:
//app/router.js
import Ember from 'ember';
import config from './config/environment';
const Router = Ember.Router.extend({
location: config.locationType
});
Router.map(function() {
this.route('movies', {
path: '/'
});
});
export default Router;
路线代码:
//app/routes/movies.js
import Ember from 'ember';
import Movie from 'search-movies/models/movie';
export default Ember.Route.extend({
model() {
return this.store.findAll('movie');
}
});
但如果我运行应用程序,我会得到404的错误:
Error while processing route: movies Ember Data Request GET /movies returned a 404
我想,商店服务部门买不到这些模型。但为什么呢?我已经生成了适配器。我需要把它进口到什么地方吗?还是怎样为什么这个结构不起作用?需要帮助。
您在app/adapters/app.js
下找到了适配器,但应用程序适配器应该在app/adapters/application.js
或app/application/adapter.js
下。
由于您的适配器似乎是特定于movie
型号的,我会考虑将其作为特定于型号的适配器放在app/adapters/movie.js
或app/movie/adapter.js
下。