我有两个模型:sites
和articles
。每个站点可以有多个文章。我想在这条路线中查看这篇文章:/siteName/articleFriendlyTitleUrl
。目前我有帮助方法来制作这样友好的网址:
getFriendlyUrl = function(urlString){
urlString = urlString.toLowerCase();
urlString = str.replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-');
return urlString;
}
我的router.js
文件:
this.route('showArticle', {
path: '/article/:title'),
layoutTemplate: 'artLayout',
data: function(){
viewData = {
title: Articles.findOne({title: this.params.title}),
site: Sites.findOne({name: this.name})
}
return viewData;
});
任何人都知道如何实现这个?我也尝试过这条道路:
/:siteName/:articleId
但没有成功 - 有任何建议吗?
答案 0 :(得分:5)
我建议在文章文档中保存slug。 当用户添加/编辑文章时,App可以使用Underscore.String.slugify函数(https://github.com/epeli/underscore.string)从标题生成slug。
具有多个参数的路线有效:
this.route('showArticle', {
path: '/:siteName/:articleSlug'),
...
data: function(){
viewData = {
title: Articles.findOne({slug: this.params.articleSlug}).title,
site: Sites.findOne({name: this.params.siteName})
}
return viewData;
}
});
答案 1 :(得分:1)
最后我解决了这个问题:我已经按照建议将friendlyTitle
字段添加到包含已解析文章标题的Articles
集合中的对象(没有特殊字符)。
这是我的路线:
this.route('showArticle', {
path: '/:site/:friendlyTitle',
layoutTemplate: 'artLayout',
data: function(){
return Articles.findOne({friendlyTitle: this.params.friendlyTitle});
}
});
:site
字段包含已分配此文章的Sites
集合中的对象的名称(在创建新文章时,我可以将其分配/发布到特定网站上)。