2014-04-26 5 views
1

AJAX를 통해 POST 요청을하는 버튼이 있으며 페이지가 완료되면 새로 고침하고 싶습니다.Node.js의 res.redirect 문제 (익스프레스)

그래서, 내 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}); 
    } 
} 

목에 간다 e 문제는 업그레이드 방법의 res.redirect이 작동하지만 buldings 처리기에서 res.render이 무시 된 것 같습니다.

buildings 메서드 내에 console.log("session: "+req.session.name)을 추가 했으므로 괜찮습니다. 모든 데이터가 정상적으로 표시되지만 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 
+0

Express 앱에 대한보기 설정이 설정되어 있습니까? 그렇다면 무엇을 할 것인가? – mscdex

+0

나는이 말을 'app.set ('views ', path.join (__ dirname,'views '));'라고 생각한다. 그렇지? – Neoares

답변

8

AJAX와 리디렉션은 호환되지 않습니다. AJAX는 브라우저가 주소 표시 줄에로드 한 URL과 별도의 컨텍스트에서 서버와 상호 작용합니다. 따라서 AJAX 요청을 한 다음 리디렉션으로 응답해도 브라우저의 window.location에 영향을주지 않으므로 AJAX 요청으로 리디렉션하는 것이 거의 항상 실수입니다. 브라우저에서 자바 스크립트를 사용하여 /upgrade에 대한 POST가 성공하면 window.location을 올바른 경로로 설정하면됩니다.