我有一个导致不同文章的链接列表。 他们看起来像这样:
<a ui-sref="post-view({ id: post._id })">...</a>
他们产生这样的href:href="/blog/546cb8af0c0ec394d7fbfdbf"
,这是应该做的。当我点击该链接时,我会转到ID为546cb8af0c0ec394d7fbfdbf
的相关文章。
但是,我认为在网址中使用id比使用文章标题更不方便用户,这就是我想要的。但我想不出一个好办法。
由于文章标题不一定是唯一的,我不知道如何根据标题从数据库中获取正确的文章(这是不可能的,我需要一些独特的东西来查找)。
我在节点上构建了网站,有mongodb,express和angular。对于路由,我使用角度ui-router项目。
这是路由在ui.router中的外观:
.state('post-view', {
url: '/blog/:id',
templateUrl: '/post',
controller: 'post'
})
如您所见,我在网址中使用了:id
,我在post
控制器中访问了该网址。
如果我应该在同一页面上显示该文章,作为当前活动状态的子状态,我可以从父状态继承id,但由于这会导致新页面,我不是确定我能做什么。
有没有人有这方面的经验?
答案 0 :(得分:2)
我建议你使用slu .. slug是标题的URL友好版本,
标题:我的英雄帖子
Slug:/ my-hero-post
WordPress广告的示例,只要它从标题中创建一个slug,就会替换它:
您需要做的是将标题中的å
或/
等字符替换为URL友好的字符,并将空格替换为-
,然后将其保存为您的标题中的唯一键在创建帖子时发布对象。您还可以查看ghost源代码示例:
此NPM包实际上为您完成了大部分工作:slugify
答案 1 :(得分:0)
我的建议是,如果您不能保证名称是唯一的,并且以后不会更改或编辑,请不要在网址中使用该文章的名称。
因为在这种情况下,您必须管理所有以前的名称并使用301重定向代码将它们指向正确的URL以进行搜索引擎优化,并且您还必须转换无法在URL中执行的特殊字符。 / p>
所以我认为你不想使用Mongodb为你制作的_id,你可以自己制作你的身份证明。从1开始,每次检查最后一个数字是什么,并将其增加一个