我正在尝试实现速记URL,这些速记URL重定向到常规URL,以使其在输入地址栏时更加有效。我正在尝试为crates.io
项目实施此操作。
为弄清我的意思,我想这样重定向URL:
/c
=> /crates
/c/rand
=> /crates/rand
/c/rand/0.5.5
=> /crates/rand/0.5.5
/c/...
=> /crates/...
这是当前配置的相关长途路由中的snippet:
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
文档,但没有找到解决方案。我觉得肯定有比我尝试过的更好的方法。谁能指出我正确的方向?