我正在编写一个简单的测试应用程序来实验node.js和couchdb的功能,到目前为止我很喜欢它,但是我遇到了一个障碍。我到处寻找,但似乎找不到答案。我的测试服务器(一个简单的地址簿)做了两件事:
- 如果用户转到
localhost:8000/{id}
,那么我的应用程序返回具有该id的用户的名称和地址。 - 如果用户去
localhost:8000/
,那么我的应用程序需要返回一个列表,一个名字是超链接,并把它们带到localhost:8000/{id}
页面。
我能够使第一个需求工作。我似乎找不到如何从我的couchdb检索所有名称的列表。这就是我需要帮助的地方。下面是我的代码:
var http = require('http');
var cradle = require('cradle');
var conn = new(cradle.Connection)();
var db = conn.database('users');
function getUserByID(id) {
var rv = "";
db.get(id, function(err,doc) {
rv = doc.name;
rv += " lives at " + doc.Address;
});
return rv;
}
function GetAllUsers() {
var rv = ""
return rv;
}
var server = http.createServer(function(req,res) {
res.writeHead(200, {'Content-Type':'text/plain'});
var rv = "" ;
var id = req.url.substr(1);
if (id != "")
rv = getUserByID(id);
else
rv = GetAllUsers();
res.end(rv);
});
server.listen(8000);
console.log("server is runnig");
可以看到,我需要填充GetAllUsers()函数。任何帮助都会很感激。
我希望您做这样的事情(使用nano,这是我编写的库):
var db = require('nano')('http://localhost:5984/my_db')
, per_page = 10
, params = {include_docs: true, limit: per_page, descending: true}
;
db.list(params, function(error,body,headers) {
console.log(body);
});
我不太确定你在那里试图用http
完成什么,但如果你正在寻找更多的例子,请随意前往我的博客。刚刚为刚开始使用node和couch的人写了一篇博文
如上所述,有时你需要创建自己的视图。查看一下CouchDB API Wiki,然后浏览一下这本书,看看什么是设计文档,然后如果你愿意,你可以去看看我为视图生成和查询编写的测试代码。
您可以创建一个列出用户的CouchDB视图。下面是一些关于CouchDB视图的参考资料,您应该阅读这些资料,以便更全面地了解这个主题:
- CouchDB视图介绍
- 使用视图查找数据
- View Cookbook for SQL jockey
- HTTP视图API
假设你有这样的文档结构:
{
"_id": generated by CouchDB,
"_rev": generated by CouchDB,
"type": "user",
"name": "Johny Bravo",
"isHyperlink": true
}
然后,您可以创建一个CouchDB视图(映射部分),如下所示:
// view map function definition
function(doc) {
// first check if the doc has type and isHyperlink fields
if(doc.type && doc.isHyperlink) {
// now check if the type is user and isHyperlink is true (this can also inclided in the statement above)
if((doc.type === "user") && (doc.isHyperlink === true)) {
// if the above statements are correct then emit name as it's key and document as value (you can change what is emitted to whatever you want, this is just for example)
emit(doc.name, doc);
}
}
}
当一个视图被创建时,你可以从你的node.js应用程序中查询它:
// query a view
db.view('location of your view', function (err, res) {
// loop through each row returned by the view
res.forEach(function (row) {
// print out to console it's name and isHyperlink flag
console.log(row.name + " - " + row.isHyperlink);
});
});
这只是一个例子。首先,我建议您浏览一下上面的参考资料,了解一下CouchDB视图的基础知识及其功能。