首先,我想为我的英语道歉.
我有一个使用Express和Jade的Node.js应用程序.我的主页有一个表格,允许人们注册.我通过POST发送数据.我有这样的处理程序:
app.post('/userCreate', user.create);
Run Code Online (Sandbox Code Playgroud)
和:
exports.create = function(req, res){
//creates the user in the database
res.render('./game/main'); //goes to the main game page
}
Run Code Online (Sandbox Code Playgroud)
我的问题是当人们注册并且我渲染主页面时,URL中出现"localhost:3000/userCreate".因此,如果我按F5,所有数据都会通过POST再次发送,因为它再次捕获'/ userCreate',并尝试创建另一个用户.
我认为一个选项可能是在创建用户后更改URL,但我意识到"渲染"和"重定向"方法都没有改变它.
我一直在阅读关于post-redirect-get模式,但我不知道如何在没有表单的情况下进行获取,我的意思是,通过javascript而不是HTML.
我正在做一个MMO实时浏览器游戏,我正在使用Mongoose(MongoDB)存储数据.
首先,我将向您展示我的对象的结构:
var playerSchema = new Schema({
name: { type: String, required: true, trim: true, index: { unique: true } },
resources: {
wood: { type: Number, required: true, default: 500},
stone: { type: Number, required: true, default: 300},
iron: { type: Number, required: true, default: 0},
cereal: { type: Number, required: true, default: 0}
},
resourcesPerHour: {
woodPerHour: { type: Number, required: true, default: 40},
stonePerHour: { type: Number, required: true, default: 20},
ironPerHour: { type: Number, required: true, …
我有一个通过AJAX执行POST请求的按钮,我希望在完成后刷新页面.
所以,我的AJAX执行POST /upgrade:
app.post("/upgrade", game.upgrade);
exports.upgrade = function(req,res){
player.findOne({name:req.session.name}, function(err, doc){
//doing something
doc.save(function(err){
if(err) console.log(err);
else res.redirect("/game/buildings");
});
});
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,redirect去/game/buildings
app.get('/game/buildings', game.buildings);
export.buildings = function(req,res){
playerDB.findOne({name:req.session.name}, function(err, doc){
//doing something
res.render('./game/buildings', {username:req.session.name});
}
}
Run Code Online (Sandbox Code Playgroud)
问题是res.redirect在升级方法有效,但在buldings处理程序中,res.render似乎被忽略了.
我console.log("session: "+req.session.name)在buildings方法中添加了一个,没关系.所有数据似乎res.render都没问题,但不起作用.
在控制台日志中,当我/game/buildings使用菜单进入路径时(这种方式工作正常),它打印如下:
routing to buildings
session: Neoares
[90mGET /game/buildings [32m200 [90m48ms - 6.58kb[0m
[90mGET /javascripts/jquery.js [36m304 [90m0ms[0m
[90mGET /javascripts/game.js [36m304 [90m1ms[0m
[90mGET /stylesheets/bootstrap.min.css [36m304 …Run Code Online (Sandbox Code Playgroud)