使用 nano 从 couchdb 返回查询

Returning queries from couchdb using nano

我已经编写了一个简单的模块来使用 nano 处理我的 couchdb CRUD 操作,但是我从 couch 数据库查询的结果中遇到困难 returning。我的代码如下。 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);
});

在执行 returned 输出时仅获取没有 returned 行的节点 http 请求参数,需要帮助 return 实际 JSON 行 queried.Thanx

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

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);
});

我决定使用 blue-nano,它使用 promises 而不是回调,代码如下。 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);
    });

});

这非常有效