模型视图控制器 - Ember.js:使用 JSONAPIAdapter 从后端获取数据 - 不起作用



我正在尝试从远程后端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.jsapp/application/adapter.js下。

由于您的适配器似乎是特定于movie型号的,我会考虑将其作为特定于型号的适配器放在app/adapters/movie.jsapp/movie/adapter.js下。

最新更新