Извлечение контента из файла Ember CLI Mirage - PullRequest
0 голосов
/ 28 января 2020

В моем приложении Ember есть компонент, который возвращает данные из файла уценки stati c.

  didInsertElement() {
    fetch('markdown/faqs-content.md').then(response => {
      response.text().then(result => {
        this.set('markdown', result);
      });
    });
  }

Когда приложение запускается, запрос переходит к http://localhost:4200/markdown/faqs-content.md и все работает нормально.

Однако в мираже я получаю эту ошибку:

Mirage: Your app tried to GET '/markdown/faqs-content.md', but there was no route defined to handle this request. Define a route for this endpoint in your routes() config. Did you forget to define a namespace?

Вышеуказанное происходит, хотя в mirage/config.js включено следующее:

this.passthrough();

Предположительно, это связано с тем, что API Пространство имен не включено в URL-адрес запроса.

Проблема может быть решена путем добавления полного URL-адреса для передачи:

this.passthrough('https://localhost:4201/markdown/faqs-content.md');

В этом есть две проблемы:

  1. Я не всегда знаю порт, на котором обслуживается приложение, и
  2. Я не хочу терять функциональность использования this.passThrough(), который автоматически вызывает проход через для любых запросов API, где нет соответствующего маршрута в mirage/config.js.

, таким образом, у меня есть 2 вопроса.

  1. В config.js, есть ли способ получения порта, на котором работает сервер Ember, чтобы разрешить что-то вроде https://localhost:${port}/markdown/faqs-content.md?

  2. Есть ли способ настроить e Mirage, чтобы пропустить запрос к https://localhost:4201/markdown/faqs-content.md и все еще разрешить ему проходить для любых других запросов, для которых не определен соответствующий маршрут?

Ответы [ 2 ]

0 голосов
/ 28 января 2020

У Passthrough (и API маршрутизации в целом) есть несколько странное поведение, основанное на том, как он был закодирован + базовая библиотека, которую он использует для перехвата запросов. Нам нужно обновить руководства, потому что другие столкнулись с этим.

Если вы поставите

this.namespace = 'api'
this.passthrough()

, тогда Mirage разрешит все запросы на /api/* сквозной переход, но если вы переместите вызов на passthrough до того, как или"сбросить" пространство имен до пустой строки, оно должно обрабатывать все запросы к текущему домену.

Мне нужно проверить, но я бы попробовал оба

this.namespace = ''
this.passthrough()

и

this.passthrough('/**')

и посмотрите, работают ли они. (Нам действительно нужно добавить вложенный DSL маршрутизации в Mirage! Он удалит все эти неуклюжие API.)

0 голосов
/ 28 января 2020

С точки зрения второго вопроса, кажется, что следующее решает его:

  this.passthrough('https://localhost:4201/markdown/faqs-content.md');
  this.passthrough();
...