首先,我想为我的英语道歉.
我有一个使用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.
问题出在这里:
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路由,以防止重新发布.