#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>