在Nodejs中是通过回调函数控制异步过程的,但是当多个事件之间相互依赖,或多个事件一起协作时,就会导致函数嵌套过深的情况。如下是一个在项目中显示文章详情页的的代码,我们看到这个函数嵌套了七八层。这样的嵌套很容易因为缺少括号发生错误。另外,当一个回调函数中出现错误,整个程序就会退出,并提示错误信息。
//查看文章详细信息
app.get("/detail/:author/:title",function(req,res){
var isAgree = false;
var isColl = false;
var isAttention = false;
console.log(req.session.user);
Post.getOne({author: req.params.author,title: req.params.title}, function (err, post) {
if (err) {
req.flash('error', err);
console.log(err);
}
//判断是否已点赞
if ( req.session.user && post.agree &&post.agree.indexOf(req.session.user.email)>=0 ) {
isAgree = true;
}
//判断是否已收藏
if ( req.session.user && post.postcoll.indexOf(req.session.user.email)>=0 ) {
isColl = true;
}
User.getOne({email:req.params.author},function(err,author_detail){
if( req.session.user && req.session.user.attention && req.session.user.attention.indexOf(req.params.author) >=0){
isAttention = true;
}
console.log(isAttention);
//获取作者的头像(昵称的问题)
Post.getTen({tags:{$in:post.tags}},1,{pv:-1},function(err, posts, totle,userImg){
if ( err ){
console.log(err);
}
Post.countPost({author:req.session.user.email},function(err,count){
if(err){
console.log(err);
}
//访问量增加
Post.viewNum( {author: req.params.author,title: req.params.title},function(err){
Post.getArchive({author:req.session.user.email},function(err,docs){
console.log(