如何避免使用Express重新发送Node.js中的刷新数据

 love乄鮰 发布于 2023-01-19 14:06

首先,我想为我的英语道歉.

我有一个使用Express和Jade的Node.js应用程序.我的主页有一个表格,允许人们注册.我通过POST发送数据.我有这样的处理程序:

app.post('/userCreate', user.create);

和:

exports.create = function(req, res){
  //creates the user in the database
  res.render('./game/main');  //goes to the main game page
}

我的问题是当人们注册并且我渲染主页面时,URL中出现"localhost:3000/userCreate".因此,如果我按F5,所有数据都会通过POST再次发送,因为它再次捕获'/ userCreate',并尝试创建另一个用户.

我认为一个选项可能是在创建用户后更改URL,但我意识到"渲染"和"重定向"方法都没有改变它.

我一直在阅读关于post-redirect-get模式,但我不知道如何在没有表单的情况下进行获取,我的意思是,通过javascript而不是HTML.

1 个回答
  • 问题出在这里:

    res.render('./game/main');  //goes to the main game page
    

    你实际上并没有"去"主游戏页面,而是渲染当前网址的视图.相反,您应该将浏览器重定向到另一条路线:

    res.redirect('/game'); // Or whatever url you have
    

    并为该URL创建一个单独的路由:

    app.get('/game', game.index);
    

    让这条路线渲染游戏:

    exports.index = function (req, res) {
      res.render('./game/main');
    };
    

    现在f5将重新加载游戏页面而不是表单POST.即使你想使用相同的URL,你应该重定向到相同网址的GET路由,以防止重新发布.

    2023-01-19 14:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有