javascript - 在 url 中使用文章标题,而不是 id

标签 javascript angularjs node.js mongodb angular-ui-router

我有一个指向不同文章的链接列表。 它们看起来像这样:

<a ui-sref="post-view({ id: post._id })">...</a>

他们生成这样的href:href="/blog/546cb8af0c0ec394d7fbfdbf",这就是它应该做的。当我点击链接时,我会转到 ID 为 546cb8af0c0ec394d7fbfdbf 的相关文章。

但是,我认为在 url 中添加 id 比在文章标题中添加用户友好性要差一些,而这正是我想要的。但我想不出什么好的方法。

由于文章标题不一定是唯一的,因此我不知道如何根据标题从数据库中获取正确的文章(这是不可能的,我需要一些唯一的东西来查找它)。

我已经在 Node 上使用 mongodb、express 和 Angular 构建了该网站。对于路由,我使用 Angular ui-router 项目。

这是 ui.router 中路由的样子:

.state('post-view', {
    url: '/blog/:id',
    templateUrl: '/post',
    controller: 'post'
})

如您所见,我在 URL 中使用 :id,并在 post Controller 中访问该 URL。

如果我应该在同一页面上显示文章,作为当前事件状态的子状态,我可以从父状态继承 id,但由于这会导致一个新页面,所以我不会确定我能做什么。

有人有这方面的经验吗?

最佳答案

我建议你使用slug。 slug 是标题的 URL 友好版本,

标题:我的英雄帖子

鼻涕虫:/my-hero-post

WordPress 广告示例每当从标题创建 slug 时都会进行一些替换:

文档:wp_unique_post_slug

Source code

您需要做的是将标题中的 å/ 等字符替换为 URL 友好的字符,并将空格替换为 - 和然后在创建帖子时将其保存为帖子对象中的唯一键。您还可以查看 Ghost 源代码的示例:

https://github.com/TryGhost/Ghost/blob/d44a97405bbe58730f3c397f504634a504d3e6e9/core/server/models/base.js#L322

这个 NPM 包实际上为您完成了大部分工作:slugify

关于javascript - 在 url 中使用文章标题,而不是 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27034929/

相关文章:

javascript - 您可以使用 browserify 来请求 node-bcrypt 客户端,然后将哈希发送到服务器吗?

node.js - RxJS5 TypeScript 打字失败

php - 2 个连续的 JQuery 帖子,第二个先执行

javascript - 如何计算 HTML 元素的左上角和窗口左上角之间的距离?

javascript - 如何使用 "..." chop css 中的列表,然后在列表中添加 "+3"更多项目?

node.js - Neo4J 单个查询中的多个匹配语句

javascript - 正则表达式略贪心捕获?

javascript - iCheck 不适用于 knockout

javascript - 模块解析失败错误 Unexpected token } - Webpack

javascript - 从 promise 中访问项目