我如何使用MongoDB / Node.js创build友好的URL?

例如,假设在devise一个博客应用程序,我想要的东西

domain.com/post/729

代替

domain.com/post/4f89dca9f40090d974000001

Ruby有以下内容

https://github.com/hakanensari/mongoid-slug

在Node.js中是否有一个等价物?

  • Node.js:带有CNAMElogging的url路由
  • nodejs expressjs angularjs路由
  • Uncaught TypeError:URL不是使用WHATWG URL对象支持电子的构造函数
  • Nodejs:redirecturl
  • 如何在路由参数中使用斜杠
  • Express.js参数的URL编码,带特殊字符
  • Expressjs重新路由
  • 如何在特定的path前缀上安装app.get()路由
  • 有几种方法:

    1-假设您试图为每篇博文提供一个唯一的ID。 为什么不覆盖博客集合中文档的“_id”字段? 示例文档将是:

    { "_id" : 122 , "content" : { "title: ..... } 

    你将不得不寻找一个方法来产生一个自动增量id,这很容易。 不过这种types的主键不推荐使用。 http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field

    2-让_id字段保持原样,并且另外存储一个整数的关键'blogid',但是您必须在'blogid`字段上运行ensureIndex ,尽pipe通过blogid快速访问。 存储开销会很小,因为您将在文档中存储更多的键名和整数。

    示例文档将是:

     { "_id" : xxxxxxxxxx ,"blogid" : 122, "content" : { "title: ..... } 

    在GitHub上有很多不同的项目,比如https://github.com/dodo/node-slug和https://github.com/stipsan/String.Slugify.js,但是他们专注于从string中创build有效的URL(通常是post主题或文章标题)。 我还没有看到任何一个随机数字,一些如何产生一个较短的随机(?)和唯一的数字。

    就我个人而言,我的后期对象上只有一个令牌字段,其中包含一个比直接使用数据库ID更短的唯一值(并且更安全一点点)。 如果您正在使用Mongoose,则可以通过钩住Mongoose模型上的“保存”事件来自动生成令牌。

    在MongoDB中的ID实际上是一个hex值将其转换为数值,您可以使用下面的代码来search数据库中的数值,如1,2,3 ..此代码将该值转换为适当的hex

     article_collection.db.json_serializer.ObjectID.createFromHexString(id) 

    其中article_collection是您的collections对象