Получение всех документов из couchdb с помощью Node.js - PullRequest
4 голосов
/ 18 августа 2011

Я пишу простое тестовое приложение, чтобы поэкспериментировать с функциональностью node.js и couchdb, пока мне это нравится, но я столкнулся с трудностями.Я искал и широкий, но не могу найти ответ.Мой тестовый сервер (простая адресная книга) выполняет 2 действия:

  1. , если пользователь переходит на localhost:8000/{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 ().Любая помощь будет оценена.Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 18 августа 2011

Вы можете создать представление 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 и их возможности.

7 голосов
/ 05 сентября 2011

Я ожидаю, что вы будете делать что-то вроде (используя 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 , затем отсканируйте книгу , проверьте, что такое проектная документация , затем, если хотите, можете пойти и проверить у меня есть тестовый код для генерации представления и запроса .

...