Meteor 铁路由器:替换特殊字符

Meteor 铁路由器:替换特殊字符,meteor,meteorite,iron-router,Meteor,Meteorite,Iron Router,为了获得可理解的链接来共享,我不想在url中只放\u id,还要放.name Router.map(function () { this.route('here', { path: 'here/:_id/:name/', template: 'here' }) }) 问题是.name条目可能有特殊字符,如/ www.example.com/here/1234/name_with special-characters like / (<-t

为了获得可理解的链接来共享,我不想在url中只放
\u id
,还要放
.name

Router.map(function () {
    this.route('here', {
        path: 'here/:_id/:name/',
        template: 'here'
    })
}) 
问题是
.name
条目可能有特殊字符,如
/

www.example.com/here/1234/name_with special-characters like / (<-this slash) /

www.example.com/here/1234/name_带有特殊字符,如/(这不是Iron Router特有的,但是JavaScript的本地全局函数
encodeURIComponent
decodUriComponent
正是为了这个目的而存在的:

encodeURIComponent("foo/bar");   // returns "foo%2Fbar"
decodeURIComponent("foo%2Fbar"); // returns "foo/bar"

在我的项目中,我要做的是添加一个名为
slug
的字段,并编写一个函数,从文档标题生成一个URL友好的slug,并检查集合以确保slug是唯一的(否则它会根据需要附加“-2”或“-3”等)。使用每个文档唯一的
slug
或类似字段,您可以将其用作唯一的查询参数,并放弃在Geoffrey Booth的答案上展开
\u id

,您可以使用模板帮助器进行此操作

定义一个模板帮助器来编码您的
名称
值(我将其设置为全局,以便所有模板都可以重用):

Template.registerHelper('encodeName',function(){
this.name=encodeURIComponent(this.name);
归还这个;
});
然后,在模板中,您可以将此函数传递给iron router的
pathFor
helper:



这对我来说在Meteor 1.1.0.2上很有效。

为什么允许在用作
url
一部分的名称中使用斜杠?您这样做有什么具体原因吗?