5

我正在编写一个简单的测试应用程序来试验 node.js 和 couchdb 的功能,到目前为止我很喜欢它,但我遇到了麻烦。我一直在寻找,但似乎找不到答案。我的测试服务器(一个简单的通讯录)做了两件事:

  1. 如果用户去,localhost:8000/{id}那么我的应用程序会返回具有该 ID 的用户的姓名和地址。
  2. 如果用户去,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() 函数。任何帮助,将不胜感激。提前致谢。

4

2 回答 2

9

我希望你会做类似的事情(使用 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,然后浏览本书,检查什么是设计文档,然后如果您愿意,可以去检查我为视图生成和查询提供的测试代码

于 2011-09-05T03:18:47.303 回答
8

您可以创建一个列出用户的 CouchDB 视图。以下是有关 CouchDB 视图的一些资源,您应该阅读这些资源以更全面地了解该主题:

因此,假设您的文档结构如下:

{
    "_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 视图的基础知识及其功能。

于 2011-08-18T19:04:27.720 回答