веб-страница клиента экспресс-принудительного обновления

#node.js #express #response #page-refresh

Вопрос:

Я пытаюсь обновить веб-страницу клиента (с помощью маршрутизатора), и везде, куда я смотрю, я вижу что-то вроде использования res.redirect(какая-то ссылка на ту же страницу), однако по какой-то причине это не работает для меня, вы знаете какие-либо альтернативы? мой код выглядит примерно так

     router.post('/sendSnippet', function (req, res) {
    req.on('data', function(data) {
        User.findOne({email: req.user.email}).then((userToEdit) =>{
            if(userToEdit){
                var newSnippet = {
                    "types":[],
                    "code": data.toString()
                }
                userToEdit.snippets.push(newSnippet)
                userToEdit.save().then(()=>{
                    //refresh here
                    res.redirect('/profile/');
                })
            }
        })
    })
});
 

заранее спасибо за любую помощь

Ответ №1:

Предполагая, что вы пытаетесь принудительно перезагрузить вкладку браузера клиента для своего веб-сайта, я не думаю, что вы можете сделать это на стороне сервера.

Вы можете использовать meta http-equiv или заголовок HTTP обновления, чтобы сообщить браузеру клиента об обновлении страницы через некоторое время, или использовать клиентский javascript для обновления страницы:

Маршрутизатор:

 router.post("/example", (req, res) => {
  res.header("Refresh", "10"); // tells the browser to refresh the page after 10 seconds
  res.send("your data");
});
 

Мета:

 <head>
  <!-- Refresh after 10 seconds -->
  <meta http-equiv="refresh" content="10">
</head>
 

Javascript html:

 <html>
  <body>
    <script>
      // reloads after 10 seconds
      setTimeout(() => {
        location.reload();
      }, 10000);
      
      // or you could have some kind of API to tell when to refresh the page
      function check() {
        const x = new XMLHttpRequest();
        x.open("GET", "some path");
        x.send();
        x.onload = function() {
          if (x.response === "done") {
            location.reload();
          } else {
            setTimeout(check, 1000);
          }
        }
      }
      check();
    </script>
  </body>
</html>