使用Node.js从couchdb检索所有文档

jgovgodb  于 2023-01-08  发布在  Node.js
关注(0)|答案(2)|浏览(137)

我正在写一个简单的测试应用程序来测试node.js和couchdb的功能,到目前为止我很喜欢它,但是我遇到了一个障碍。我已经找了很多,但是似乎找不到答案。我的测试服务器(一个简单的地址簿)做两件事:
1.如果用户转到localhost:8000/{id},则my app返回具有该ID的用户的名称和地址。
1.如果用户转到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()函数。任何帮助都将不胜感激。提前感谢。

szqfcxe2

szqfcxe21#

我希望你能做一些类似的事情(使用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完成什么,但是如果你想寻找更多的例子,请随时访问我的博客。
如前所述,你需要创建自己的视图,检查一下CouchDB API Wiki,然后检查一下scan thru the book,检查一下design documents是什么,如果你愿意,你可以检查一下我的视图生成和查询测试代码。

iqxoj9l9

iqxoj9l92#

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

假设您的文档结构如下:

{
    "_id": generated by CouchDB,
    "_rev": generated by CouchDB,
    "type": "user",
    "name": "Johny Bravo",
    "isHyperlink": true
}

然后您可以创建一个CouchDB视图(Map部分),如下所示:

// 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视图的基础知识和它的功能。

相关问题