一起学node.js源码中查找文章通过用户名,日期,和标题,感觉很繁琐,如果每篇文章都有一个id,自增的,则可以通过id来查找,方便了查找方式,而且可以缩短文章的路径,不知道这个问题如何解决,拜托各位大神给个解决办法
的确通过 id 查找很省事,而且也解决了同一天不能发表相同标题的文章的 bug。。但是并不 RESTful 了。。最主要的是当初写教程时我也不会用 mongodb 里的
"_id" : ObjectId("abcdefghijklmnopqrstuvwxyz")
其实 _id 直接使用就行。。比如 post._id 就是 abcdefghijklmnopqrstuvwxyz。
@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);
});
}
});
});
});
运行后看看结果你就明白了