【问题标题】:Node.js + express : rewrite url pathNode.js + express : 重写 url 路径
【发布时间】:2014-02-11 20:46:03
【问题描述】:

我想知道是否可以用 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: "/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。

如何更改此网址?

我知道 javascript 解决方案:

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

但是,我想知道服务器是否存在解决方案。

谢谢

【问题讨论】:

  • 我认为你应该添加更多关于你调用服务器的方式的信息,另外,你想清楚地做什么?您想从您的 JS 调用您的服务器并在调用后更改 url 吗?我不确定是否理解。不要忘记historyAPI 是 HTML5,所以这种方法不适用于像 IE 9 这样的旧浏览器。你应该看看History.js
  • 除非您正在进行 AJAX 调用(而且您似乎不是),否则约定是服务器使用 res.redirect("home.ejs") 向浏览器发送重定向以强制正如您所描述的那样,URL 会发生变化。这也可以防止用户在浏览器上点击刷新时重新提交登录数据。
  • 我添加了一些关于通话的信息​​。

标签: node.js url url-rewriting express


【解决方案1】:

我会在请求本地添加一个错误,重定向到登录,然后在呈现登录页面时检查是否存在错误。

.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多