如何在不丢失表单数据的情况下发布redir-get

时间:2011-08-17 11:11:29

标签: javascript http node.js

假设用户获得了一个页面/表单/

GET /form/

然后,他填写表格并发送一个帖子请求

POST /form/

服务器尝试验证用户输入并确定输入无效。

目前,用户的历史链是

  • GET /form/
  • POST /form/

现在服务器将用户重定向到GET /form/页面,以便它可以再次填写表单(包含错误消息)。

他的历史似乎是

  • GET /form/已填写表单字段
  • GET /form/未在表单字段中提交

如果用户没有丢失他在第一张表单中输入的详细信息,我该如何发回用户?

有哪些技术可以将用户重定向回GET /form/页面,而不是强制他们重新输入信息。

以下是此示例的express(node.js)特定服务器端代码。

验证中间件:

validate().on("error", function _error(msg) {
    // store error message on request object
    req.flash(msg, validateUserMessage[msg]);
}).on("valid", function _valid() {
    // handle the rest of /POST/
    next();
}).on("invalid", function _invalid() {
    // redirect user back to last page, the /GET/ form
    res.redirect("back");
}).run(function _validateUsers(check, sanitize) {
    // validation logic.
}); 

路由:

// GET /form/
app.get("/form", function _signUpView(req, res) {
    // render /form/
    res.render("auth/signup", req.flash());
});

// POST /form/
// validation middleware used here. 
app.post("/form", secure.validateUser, function _signUpCreate(req, res) {
    model.create(req.body, function _create() {
         // create thing in database
    });
});

2 个答案:

答案 0 :(得分:2)

请勿重定向无效输入。只在有效输入上执行。

在无效输入时,使用相同的表单响应POST请求,但这次填充了刚刚收到的POST数据。

答案 1 :(得分:0)

我决定将以下评论总结为我的答案:

对我而言,似乎只有两种可靠的方法:


1。将用户输入参数从服务器传回浏览器并重新填充表单:

a)使用传递给视图的参数对象并使用您的severside语言填充每个字段

b)使用loadJson

传回Json对象并填充表单



2。使用HTML5本地存储 - 这也需要JavaScript


如果您没有使用服务器 JavaScript 来存储您的数据,那么您肯定会限制自己依赖浏览器 - 这是您无法控制的。< / p>

祝你好运 - 如果你确实找到了解决方案,那么请将它作为你的答案发布,因为我会非常感兴趣地看你是如何成功的。