#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'
});
Если это каким-либо образом поможет вам, не стесняйтесь дать этому ответу положительный результат 🙂