一起学node.js源码中,如果想给发布的文章添加一个id,应该如何处理
发布于 9 年前 作者 mygod 4812 次浏览 最后一次编辑是 6 年前

一起学node.js源码中查找文章通过用户名,日期,和标题,感觉很繁琐,如果每篇文章都有一个id,自增的,则可以通过id来查找,方便了查找方式,而且可以缩短文章的路径,不知道这个问题如何解决,拜托各位大神给个解决办法

10 回复

的确通过 id 查找很省事,而且也解决了同一天不能发表相同标题的文章的 bug。。但是并不 RESTful 了。。最主要的是当初写教程时我也不会用 mongodb 里的

"_id" : ObjectId("abcdefghijklmnopqrstuvwxyz")

其实 _id 直接使用就行。。比如 post._id 就是 abcdefghijklmnopqrstuvwxyz。

没想到楼主亲自回复啊,受宠若惊,我是新手一直在认真看你的教程,非常感谢啊,不知道您方便留下除了邮箱之外更方便的联系方式吗,有些问题想请教您

@MyGod 邮箱就可以拉,我用的邮箱插件,来邮件会有妹子提醒的…

@nswbmw126的邮箱插件,妹子提醒,这么高级啊

@nswbmw您当初写教程的时候没有用mongoose,对于我这样的菜鸟非常迷惑,因为不清楚用mongodb直接操作数据库和mongoose到底孰优孰劣,在什么情况下需要mongoose比较合适呢,mongoose需要定义数据模型,这样mongodb的灵活性还存在吗,期待您的解惑,非常感谢

@MyGod 当初不会 mongoose,现在依然不会。。孰优孰劣就不敢妄下断论了。我觉得原生的mongodb-native就挺好用的。。当然,mongoose 也有他的好处,这个就请用过的人来评论吧。。就个人而言,肯定会去学学mongoose的,你如果也去了解下mongoose,自然也就知道什么时候该用native的什么时候该用mongoose了。。

Post.getOne = function(_id, allback) { //打开数据库 mongodb.open(function (err, db) { if (err) { return callback(err); } //读取 posts 集合 db.collection(‘posts’, function (err, collection) { if (err) { mongodb.close(); return callback(err); } //根据用户名、发表日期及文章名进行查询 //collection.findOne({ // “name”: name, // “time.day”: day, // “title”: title collection.findOne({ "_id": require(‘mongodb’).ObjectID(_id) }, function (err, doc) { mongodb.close(); if (err) { return callback(err); } //解析 markdown 为 html if(doc){ doc.post = markdown.toHTML(doc.post); doc.comments.forEach(function (comment) { comment.content = markdown.toHTML(comment.content); }); } callback(null, doc);//返回查询的一篇文章 }); }); }); };用这种方式查询一篇文章,错在什么地方,求大神指点

@nswbmw Post.getOne = function(_id, allback) { //打开数据库 mongodb.open(function (err, db) { if (err) { return callback(err); } //读取 posts 集合 db.collection(‘posts’, function (err, collection) { if (err) { mongodb.close(); return callback(err); } //根据用户名、发表日期及文章名进行查询 //collection.findOne({ // “name”: name, // “time.day”: day, // “title”: title collection.findOne({ "_id": require(‘mongodb’).ObjectID(_id) }, function (err, doc) { mongodb.close(); if (err) { return callback(err); } //解析 markdown 为 html if(doc){ doc.post = markdown.toHTML(doc.post); doc.comments.forEach(function (comment) { comment.content = markdown.toHTML(comment.content); }); } callback(null, doc);//返回查询的一篇文章 }); }); }); };用这种方式查询一篇文章,错在什么地方,求大神指点

@MyGod 运行你的博客,然后发表几篇文章。然后在博客根目录下建个文件比如叫 _id.js ,内容如下:

var mongodb = require('./models/db');

mongodb.open(function (err, db) {
  if (err) {
    //
  }
  db.collection('posts', function (err, collection) {
    if (err) {
      //
    }

    collection.find().toArray(function (err, docs) {
      if (err) {
        //
      }
      
      for (var i in docs) {
        collection.findOne({
          "_id" : docs[i]._id
        }, function (err, doc) {
          if (err) {
            //
          }
          console.log(doc.title);
        });
      }
    });
  });
});

运行后看看结果你就明白了

回到顶部