Node查询mongo时双重回调读取报错
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)打印出了信息啊,
下面定位到的代码
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();//关闭数据库
}
});
});
}
不能帮忙的进来给点提示,解决Bug技巧也行啊。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
看这个报错信息应该是你的result2[0]是undefined,那么很有可能是你在user这个db里没有找到符合条件的result2
具体你可以先吧render里的cirentouxiang字段去掉,打印下result2,这样应该可以定位出问题所在
我又看了下你的打印信息,仔细看,你的报错的上面是一个空数组[],所以肯定会报错的
async和await传一个隐性Promise可以解决双重回调问题