Хост-адаптер модели Ember не перекрывает mirage

#ember.js #ember-cli-mirage

#ember.js #ember-cli-mirage

Вопрос:

Я использую Ember-cli-mirage для макетирования данных. Я хочу постепенно интегрировать части производственного API, который находится на моем локальном компьютере по адресуhttp://localhost:8000. Документы Ember говорят мне, что я должен иметь возможность устанавливать адаптер, чтобы у меня был другой хост для каждой модели.

У меня есть customer модель, и я настроил ember-cli-mirage, который успешно обслуживает данные. Модель customer — это первая модель, которую я хочу разделить на localhost: 8000.

Я настроил adapters/customer.js со следующим:

 import DS from 'ember-data';

export default DS.RESTAdapter.extend( {
  host: 'http://localhost:8000',
  namespace: 'api/v1'
});
  

Но когда я выполняю вызов, я получаю сообщение об ошибке:

 Mirage: Error: Your Ember app tried to GET 'http://localhost:8000/api/v1/customers',
         but there was no route defined to handle this request.
         Define a route that matches this path in your
         mirage/config.js file. Did you forget to add your namespace?
  

И мой инспектор заголовков показывает, что клиенты отправляют запрос на сервер mirage:

 Request URL:http://localhost:6543/customers
Request Method:GET
Status Code:304 Not Modified
Remote Address:[::1]:6543
  

Я подозреваю, что это как-то связано с моим config/environment.js настройка итак, я рассматриваю вариантhttps://github.com/samselikoff/ember-cli-mirage/issues/497#issuecomment-183458721 в качестве потенциального обходного пути. Но я не понимаю, почему mirage не принимает переопределение адаптера.

Ответ №1:

Должен был прочитать документы Mirage для этого. Существует функция сквозной передачи, которая позволяет mirage передавать определенные запросы в Ember в обход mirage:

 // mirage/config.js
import Mirage from 'ember-cli-mirage';

export default function() {

  this.urlPrefix = 'http://localhost:8000';
  this.namespace = '/api/v1';

  // Requests for customers
  this.get('/customers');
  this.get('/customers/:id');
  this.post('/customers');
  this.del('/customers/:id');
  this.patch('/customers/:id');

  // Passthrough to Django API
  this.passthrough('/customers');

}
  

Чтобы это работало в моем адаптере приложений, я добавил:

 // app/adapters/application.js
import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  host: 'http://localhost:8000',
  namespace: 'api/v1'
});
  

Если это каким-либо образом поможет вам, не стесняйтесь дать этому ответу положительный результат 🙂