Node.js(Express)中res.redirect的问题
我有一个button,通过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"); }); }); }
正如你所看到的, 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}); } }
问题是升级方法中的res.redirect
起作用,但在res.render
处理程序中, res.render
似乎被忽略。
我在buildings
方法里面添加了一个console.log("session: "+req.session.name)
,没关系。 所有的数据似乎是好的,但res.render
不起作用。
在控制台日志中,当我使用菜单进入/game/buildings
path(这种方式工作正常),它打印这样的东西:
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 [90m1ms[0m [90mGET /stylesheets/justified-nav.css [36m304 [90m1ms[0m [90mGET /images/buildings/wishing_well.svg [36m304 [90m1ms[0m [90mGET /images/resources/wood.png [36m304 [90m1ms[0m [90mGET /images/resources/stone.png [36m304 [90m2ms[0m [90mGET /images/resources/iron.png [36m304 [90m1ms[0m
但是当我通过AJAXbutton时,它只打印这个:
routing to buildings session: Neoares [90mGET /game/buildings [32m200 [90m98ms - 6.58kb[0m
AJAX和redirect不兼容。 按照定义,AJAX与浏览器在地址栏中加载的URL分开的上下文中与服务器进行交互。 因此,做一个AJAX请求,然后用redirect响应不会自动影响浏览器的window.location
,因此发送redirect到一个AJAX请求几乎总是一个错误。 你可以做的只是在浏览器中使用JavaScript来设置window.location
到正确的path,如果你的POST成功/upgrade
。