CouchDB在Node.js中获取来自用户的所有帖子
CouchDB getting all posts from user in Node.js
我首先会说我做了很多研究,但我仍然很迷茫。
我有一个工作版本,但我相信这是最低效的方法。我对知道规划DB的最佳方式不是很有信心,很明显,我已经变得依赖ActiveRecord了。无论如何,我只是想弄清楚这些事情:
- 找出规划数据库的最佳方法(如何分离文档)
- 找到处理关系最有效的方法
- 从服务器上查找好的查询方法
好吧,我注意到了一些事情:第一,您不能将I客户端变量传递到视图中,所以使用这样的方法是行不通的。第二,我认为可能需要获取所有帖子,然后检查类型是否为帖子,然后返回匹配的文档,但这似乎有很多数据在移动。
部分代码:
所以我使用Node.js、CouchDB和nano作为中间件。
张贴文件:
{
"_id": "post-slug",
"title": "Post Slug",
"user": "film42",
"date": 1343451412,
"type": "post"
}
用户文档:
{
"_id": "film42",
"email": "test@example.com",
"posts": [
"post-slug",
"another-post-slug"
],
"type": "user"
}
以下是我目前获取所有帖子的方式(真的很糟糕!):
function buildUserPostArray(array, user, res, i) {
db.get(user.posts[i], function(err, post_obj) {
if(i < user.posts.length) {
array.push(post_obj);
buildUserPostArray(array, user, res, i+1);
}
else {
console.log('Rendering view now.');
res.render('user.jade', {
user: user.user,
posts: array
});
}
});
}
app.get('/users/:id', function(req, res) {
db.get(req.params.id, function(err, user_obj) {
if(err) res.send('err1'); //bad id or server down
array = [];
buildUserPostArray(array, user_obj, res, 0);
});
});
我一直在使用视图,直到我意识到我不能传递变量,然后我查看了列表,但在阅读了许多教程后,我迷失了方向。
谢谢你的帮助!!
您确实想要使用视图。只需在帖子上创建以用户为关键的视图。
function(doc) {
emit(doc.user, {title: doc.title, date: doc.date, id: doc._id});
}
然后你可以简单地查询它:
GET /yourdb/_design/app/_view/by_user?key=film42
这将为您提供与该用户关联的所有视图文档。
正如Will Hartung所说,你想要一个视图,但它看起来应该与Will的显示方式有所不同。
首先,请确保要发射的字段存在。请记住,null
和0
在JavaScript中是错误的值,因此根据您的数据结构,您可能必须明确检查字段是否为undefined
。
这里有一些代码来告诉你我的意思。
function(doc) {
if (doc.user && doc.title) { // This check is important
emit(doc.user, {title: doc.title, date: doc.date});
}
}
您不必显式地发出文档ID,因为这无论如何都是自动发生的。还要确保不要发出整个文档emit(doc.user, doc);
。这是低效的。如果您需要整个文档,只需发出null
作为值,并使用include_docs=true
URL参数。
因此,基本上,如果您将null
作为一个值发出,那么您就会得到这样的文档。
是否获取/yourdb/design/app/_view/by_user?key=film42&include_docs=真正的
- 如何使用Node.js脚本从Rally获取用户的修订历史
- 通过node.js和socket.io向特定用户发送数据
- 通过node.js和socket.io在两个用户之间发送消息
- 我如何使用D3来强制用户点击g.node对象内部的圆形对象
- Node.js和angular用户授权
- 尝试通过angularjs和node将用户数据发送到mongodb
- node-webkit:将数据导出到csv并提示用户保存文件
- 如何在Formidable(Node.js)中取消用户上传
- Node.js:Passport,检查用户是否已经登录
- 如何让JavaScript控制台用户输入工作(node.js)
- CouchDB在Node.js中获取来自用户的所有帖子
- 获取Node.js以获取用户's从HTML文本字段输入
- Node.js:在用户连接之前向客户端发送数据
- 如何在 Node 中使用 Passport.js 模拟其他用户
- 用户输入 - Javascript Node js.
- 如何使用 node.js 创建用户模型
- 强大的用户库,类似于示例java / go for node.js(javascript)
- 如何防止用户直接在 Node.js 中访问网页
- 如何推送通知到特定用户Node + AngularJS + Laravel
- 如何在用户浏览我的站点时持久化用户?node . js