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/buildingspath(这种方式工作正常),它打印这样的东西:

 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