Перенаправить сокращенные URL-адреса с дочерними элементами на обычный URL - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь реализовать сокращенные URL-адреса, которые перенаправляют на обычные URL-адреса, чтобы сделать их более эффективными для ввода в адресной строке.Я пытаюсь реализовать это для проекта crates.io.

Чтобы пояснить, что я имею в виду, я бы хотел перенаправить URL-адреса следующим образом:

  • /c => /crates
  • /c/rand => /crates/rand
  • /c/rand/0.5.5 => /crates/rand/0.5.5
  • /c/... => /crates/...

Ниже приведен фрагмент соответствующих длинных маршрутов, настроенных в настоящее время:

this.route('crates');
this.route('crate', { path: '/crates/:crate_id' }, function() {
    this.route('download');
    this.route('versions');
    this.route('version', { path: '/:version_num' });
    this.route('reverse-dependencies', { path: 'reverse_dependencies' });
    this.route('owners');
    this.route('docs');
    this.route('repo');
});

Вот что я пробовал;Я попытался реализовать эти перенаправления, определив следующие дополнительные маршруты:

this.route('c');
this.route('c', { path: '/c/:crate_id' });

С этим ./routes/c.js:

import Route from '@ember/routing/route';

export default Route.extend({
    afterModel(crate, path) {
        if (crate === undefined) this.transitionTo('crates');
        else this.transitionTo('crate', crate, path);
    },
});

Это работает только частично.Маршруты /c и /c/rand покрыты и работают, в то время как другие, такие как /c/rand/0.5.5, не работают.

Я могу реализовать все возможности дочерних маршрутов, но я не думаю, что это правильноспособ сделать это.Я хотел бы предотвратить дублирование кода.


Как бы я это правильно реализовал?Можно ли перенаправить что-нибудь, начиная с /c, на их соответствующие длинные маршруты?Я изучил документацию ember, но не нашел решения.Я чувствую, что должен быть лучший способ, чем то, что я пробовал.Может ли кто-нибудь указать мне правильное направление?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...