使用nano从couchdb返回查询

时间:2017-03-20 10:26:15

标签: javascript couchdb couchdb-nano

我已经编写了一个简单的模块来处理我使用nano的couchdb CRUD操作,但是我从沙发数据库查询的结果中遇到了困难。我的守则如下。 的 couchdb.js

//Select from couch view
exports.couchSelect=function (_db, document,view) {
    return _db.view(document, view,function(err, body){

            if(!err){
                var rows = body.rows; //the rows returned
                console.log(rows);
                return rows;
            }else{
                console.log(err);
            }

        }
    );
}

routes.js

var couchdb = require('./couchdb');
app.get("/orders", function (req, res) {
    var db = couchdb.couchConnect('ezyextension_orders');
    var insert = couchdb.couchSelect(db, 'orders', 'orders');
    console.log(insert);
});

执行返回的输出时只获取Node http请求参数而不返回行,需要帮助返回查询的实际JSON行.Thanx

2 个答案:

答案 0 :(得分:0)

你正在使用nano使用回调来进行异步调用。返回_db.view只返回一个void函数。我添加了评论,告诉你发生了什么:

exports.couchSelect = function(_db, document, view) {
    _db.view(document, view, function(err, body) {
        //This will be called after the couchSelect request.
        if (!err)
            console.log("Callback : " + body.rows);
    });
}


//When you use it

var couchdb = require('./couchdb');
app.get("/orders", function(req, res) {
    var db = couchdb.couchConnect('ezyextension_orders');
    var insert = couchdb.couchSelect(db, 'orders', 'orders');
    //This is synchronous. This will be called before the callback is called.
    console.log(insert);
});

答案 1 :(得分:0)

我决定使用使用promises而不是回调的blue-nano,代码如下。 的 couchdb.js

var nano = require('nano-blue')('http://localhost:5984');
//Select from couch view
exports.couchSelect=function (_db, document,view) {

    return _db.view(document, view);

}

<强> routes.js

    app.get("/orders", function (req, res) {
    var db = couchdb.couchConnect('ezyextension_orders');
    couchdb.couchSelect(db, 'orders', 'all').spread(function (body,header) {
        res.send(body.rows);
    }).catch(function(err) {
        console.log(err.message);
    });

});

这完美无缺