0

我编写了一个简单的模块来使用 nano 处理我的 couchdb CRUD 操作,但是我很难从我从沙发数据库查询的结果中返回。我的代码如下。 沙发数据库.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);
            }

        }
    );
}

路由.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

4

2 回答 2

0

我决定使用 blue-nano,它使用 Promise 而不是回调,代码如下。 沙发数据库.js

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

    return _db.view(document, view);

}

路由.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);
    });

});

这完美地工作

于 2017-03-21T06:43:24.767 回答
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);
});
于 2017-03-21T00:10:00.493 回答