在express nodeJS中同时刷新多条路由

时间:2017-11-24 19:54:30

标签: node.js mongodb sockets http express

在我的短信应用中,我想重新加载其他用户的页面,以便实时添加消息

有什么方法可以重新加载其他用户的'/ profile / chat /:username /:id /'路由,因为邮件正确添加但是mongodb其他用户页面中新收到的邮件只能被看到刷新页面后** ***这是我的路线*

router.post('/profile/chat/:username/:id/send',isLoggedIn,
      function(req,res){

  User.findById(req.user._id,function(err,primaryUser){
      if (err) {
      console.log(err);
      } else {







  if (primaryUser.messages.some((message) => message.id.toString() === 
   req.params.id.toString())) {




  User.findOneAndUpdate({username:req.user.username,
   "messages.id":req.params.id},
    {$push:
     {"messages.$.texts":

     {
      message:req.body.message,
      username:req.user.username
     }

     }
       },function(err,user){
    if (err) {
       console.log(err);
     } else {

     User.findOneAndUpdate({username:req.params.username,
      "messages.id":req.user.id},
     {$push:
     {"messages.$.texts":

   {
      message:req.body.message,
      username:req.user.username
   }

    }
    },function(err,user){
    if (err) {
     throw err;
  } else {



  //What should  do here?
   //so i can reload '/profile/chat/:username/:id/' route of other 
   //user















 console.log("Debugg Point 3"); 

}
})   
console.log("Debugg Point 4");
res.redirect("back");
}
})





 }
   else {

   var primarySpace = {
     id:req.params.id,
     User:req.params.username
   }

   primaryUser.messages.push(primarySpace);
   primaryUser.save();


   User.findById(req.params.id,function(err,secondaryUser){
     if (err) {
      console.log(err);
    } else {



   var secondarySpace = {
     id:req.user._id,
     User:req.user.username
   }

  secondaryUser.messages.push(secondarySpace);
  secondaryUser.save();


User.findOneAndUpdate({username:req.user.username,
 "messages.id":req.params.id},
{$push:
{"messages.$.texts":

{
message:req.body.message,
username:req.user.username
}

}
},function(err,user){
if (err) {
throw err;
} else {

  User.findOneAndUpdate({username:req.params.username,
 "messages.id":req.user.id},
{$push:
{"messages.$.texts":

{
message:req.body.message,
username:req.user.username
}

}
},function(err,user){
if (err) {
throw err;
} else {

 console.log("Debugg Point 1"); 

}
})   
console.log("Debugg Point 2");
res.redirect("back");
}
})  
    }
   })    
  }    
    }
  })

})

1 个答案:

答案 0 :(得分:0)

除非您在其他用户的页面和服务器之间有连续的webSocket连接,否则您的服务器无法告知当前没有请求服务器刷新自身的其他网页。这不是网页的完成方式。在那个时间点,您的服务器根本没有与其他用户的浏览器连接,因此它无法使该浏览器执行任何操作。

消息传递应用程序的通常架构是让其他用户的网页与服务器建立连续的webSocket连接。然后,当服务器上发生新事件并且服务器想要更新该其他网页时,它只能通过webSocket连接发送该网页事件。然后,其他用户的网页中的代码将接收这些事件,并可以使用该信息执行任何操作。理想情况下,它只会使用新信息动态更新当前网页。但是,它还可以指示网页进行刷新以从头开始加载整个页面(尽管对于客户端和服务器而言,这比仅向现有页面添加新内容要低得多)。

效率低得多的架构适用于您应用中的每个消息页面,只需每隔一段时间自动刷新一次,即可获取新内容。这是一个相当低效的架构,因为当没有任何新东西(为服务器增加大量额外负载)时,它很可能会很多次刷新,并且因为新数据可用和网页刷新之间可能会有延迟本身。如上所述的webSocket连接更高效,响应更快。