我想知道是否可以用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");
但是,我想知道服务器是否存在解决方案。
谢谢
最佳答案
我会向请求局部变量添加一个错误,重定向到登录,然后检查渲染登录页面时是否存在错误。
.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});
})
关于Node.js + Express : rewrite url path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21712651/