Node.js中的res.redirect问题(Express)

时间:2014-04-26 17:27:45

标签: node.js express

我有一个通过AJAX执行POST请求的按钮,我希望在完成后刷新页面。

所以,我的AJAX对/upgrade进行了POST:

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有效,但在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 [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

但是当我通过AJAX按钮时,它只会打印出来:

routing to buildings
session: Neoares
[90mGET /game/buildings [32m200 [90m98ms - 6.58kb[0m

1 个答案:

答案 0 :(得分:8)

AJAX和重定向不兼容。根据定义,AJAX在一个单独的上下文中与服务器交互,浏览器在地址栏中加载了该URL。因此,执行AJAX请求然后使用重定向进行响应不会自动影响浏览器的window.location,因此将重定向发送到AJAX请求几乎总是错误的。您可以做的只是在浏览器中使用javascript将window.location设置为正确的路径,如果您对/upgrade的POST成功。