2014-02-11 150 views
1

我想知道是否有可能用express來重寫url。Node.js + express:重寫url路徑

其實我有這樣的代碼:

var http, express, app; 

http = require("http"); 
express = require("express"); 
app = express(); 

app.use(express.json()) 
app.use(express.urlencoded()) 

.post("/ajax_login", function (req, res) { 
    "use strict"; 
    http.get({ host: "localhost", port: 8080, path: "https://stackoverflow.com/users/" + req.body.email + "/email" }, function (resp) { 
     resp.setEncoding("utf8"); 
     resp.on("data", function (data) { 
      json = JSON.parse(data); 
      if (json.password.password === sha1(req.body.password)) { 
       res.render("home.ejs"); 
      } else { 
       res.render("login.ejs", { email : req.body.email, error : "password is not good" });   
      } 
     }); 
    }); 
}) 

.get("/login", function (req, res) { 
    "use strict"; 
    res.render("login.ejs"); 
}) 

.listen(3030); 

我打電話從表單/ ajax_login:

<form method="post" action="/ajax_login"> 
    <div class="form-group"> 
     <label for="email">Email address</label> 
     <input type="email" class="form-control" id="email" name="email" /> 
    </div> 
    <div class="form-group"> 
     <label for="password">Password</label> 
     <input type="password" class="form-control" id="password" name="password" /> 
    </div> 
    <button type="submit" class="btn btn-primary">Connection</button> 
</form> 

的問題是:當我打電話/ ajax_login,後res.render我的HTML代碼上我的瀏覽器已更改,但url仍然是/ ajax_login。

如何更改此URL?

我知道的JavaScript解決方案:

window.history.pushState("", document.title, "/login"); 

但是,我想知道如果解決方案從服務器存在。

感謝

+0

我想你應該添加有關你打電話給你的服務器和,也順便了解更多信息,你想做什麼清楚?你想從你的JS調用你的服務器,並在通話後更改網址?我不確定要理解。不要忘記'history'API是HTML5,所以這種方法不適用於像IE9這樣的舊瀏覽器。你應該看看[History.js](https://github.com/browserstate/history.js/) ) – RPDeshaies

+0

除非您正在進行AJAX調用(並且您似乎不是),否則約定是服務器使用res.redirect(「home.ejs」)向瀏覽器發送重定向,以強制URL的更改描述。這也可以防止用戶在瀏覽器上刷新刷新時重新提交登錄數據。 –

+0

我已經添加了關於該通話的一些信息。 – LOLKFC

回答

3

我想補充一個錯誤請求當地人,重定向到登錄,然後檢查是否呈現登錄頁面時存在錯誤。

.post("/ajax_login", function (req, res) { 
    "use strict"; 
    ... 

    if (password && email IS OK) { 
     res.locals.errorMSG = "password is not good"; 
     res.redirect("/login"); //redirect vs render 
    } else { 
     res.render("home.ejs"); 
    } 

}) 

.get("/login", function (req, res) { 
    "use strict"; 
    res.render("login.ejs", {error: res.locals.errorMSG || null}); 
}) 

res.locals

res.redirect

+0

res.redirect信息幫助了我,謝謝 –