Node查询mongo时双重回调读取报错

发布于 2022-09-06 08:51:01 字数 2396 浏览 16 评论 0

router.js中

//显示某一个用户的个人主页
exports.showUser = function(req,res,next){
    var user = req.params["user"];
    db.find("posts",{"username":user},function(err,result){
        db.find("users",{"username":user},function(err,result2){
            console.log(result2);
            res.render("user",{
                "login": req.session.login == "1" ? true : false,
                "username": req.session.login == "1" ? req.session.username : "",
                "user" : user,
                "active" : "我的说说",
                "cirenshuoshuo" : result,
                "cirentouxiang" : result2[0].avatar
            });
        });
    });

}

我这里console.log(result)打印出了信息啊,

clipboard.png

下面定位到的代码
router.js:330:45 就是上面那个代码
db.js:94:17 :

exports.find = function (collectionName,json,C,D) {
    var result = [];   //结果数组
    //JS没有函数重载,只能手动实现
    if(arguments.length == 3) {
       //如果没有传args
        //那么参数C就是callback,参数D没有传。
        var callback = C;
        var skipnumber = 0;
        //数目限制,limit(0)就是没有限制
        var limit = 0;
    }else if(arguments.length == 4) {
        var args = C;
        var callback = D;
        //应该省略的条数
        var skipnumber = args.pageamount * args.page || 0;
        //数目限制
        var limit = args.pageamount || 0;
        //排序方式
        var sort = args.sort || {};
    }else {
        throw new Error("find函数的参数个数,必须是3个,或者4个");
        return;
    }
    //从第零页开始
    // console.log("略过了"+skipnumber+"条"+"限制在"+limit+"条");
    //链接数据库,链接之后查找所有
    _connectDB(function (err,db) {
        var cursor = db.collection(collectionName).find(json).skip(skipnumber).limit(limit).sort(sort);
        cursor.each(function (err, doc) {
            if(err) {
                callback(err,null);
                db.close();
                return;
            }
           if(doc != null) {
               result.push(doc); //放入结果数组
           }else {
               //遍历结束,没有更多的文档
                callback(null,result);
               db.close();//关闭数据库
           }
        });
    });
}

clipboard.png

不能帮忙的进来给点提示,解决Bug技巧也行啊。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一杆小烟枪 2022-09-13 08:51:01

看这个报错信息应该是你的result2[0]是undefined,那么很有可能是你在user这个db里没有找到符合条件的result2
具体你可以先吧render里的cirentouxiang字段去掉,打印下result2,这样应该可以定位出问题所在
我又看了下你的打印信息,仔细看,你的报错的上面是一个空数组[],所以肯定会报错的

長街聽風 2022-09-13 08:51:01

async和await传一个隐性Promise可以解决双重回调问题

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文