【问题标题】:refreshing multiple routes in simultaneously in express nodeJS在express nodeJS中同时刷新多个路由
【发布时间】:2017-11-25 05:26:56
【问题描述】:

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

有什么办法可以重新加载其他用户的'/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");
}
})  
    }
   })    
  }    
    }
  })

})

【问题讨论】:

    标签: node.js mongodb sockets http express


    【解决方案1】:

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

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

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

    【讨论】:

    • 那么我应该使用 npm nodemon 还是 npm reload ,哪个更适合这种类型的实例?
    • @saurabhpandey - 我不知道这两个与这个问题有什么关系。不明白上下文。
    猜你喜欢
    • 2013-05-24
    • 2019-01-01
    • 2020-01-19
    • 2019-01-21
    • 2017-07-12
    • 2019-01-24
    • 1970-01-01
    • 2020-04-24
    相关资源
    最近更新 更多