0

当我这样做时:

app.post('/account', function(req, res){

    // attempt to validate input and insert user into db
    signUpUser(req.body, function(success){

        if(success){

            // validation and sign up process successful - send to account page
            res.redirect(302, '/account');

        }else{

            // validation or something else failed - redirect to register page 
            // and ask them to try again
            res.redirect(422, '/register');

        }
    };
})

重定向工作得302很好,但是422重定向将用户发送到一个刚刚读取的页面


422节点响应页面


我该如何阻止它这样做?我不想显示一个页面,要求用户单击链接到它要去的地方,我希望它只是去那里。我可以改用302代码响应,但422更准确地描述了正在发生的事情。

有任何想法吗?非常感谢

4

2 回答 2

2

它的状态代码以3使浏览器重定向(维基百科)开始的原因,所以自然不能同时拥有 HTTP 重定向和422状态代码。您在这里有一些选择:

  1. 返回 3xx 状态
  2. 返回 422 状态并且不进行重定向
  3. 返回任何状态并使用javascript元标记执行重定向

我推荐选项2:

  1. 如果您正在构建 API,您不需要任何 HTTP 重定向,只需要有关问题所在的信息
  2. 如果您正在构建 Web 应用程序,通常的做法是在成功时重定向并在出现问题时填写错误的表单(抱歉没有相关来源,也许有人可以提供帮助?)

调用redirect的方法只是为了方便设置状态302(尽管您可以像在示例中那样覆盖它)和Location标题。应该禁止将其与 3xx 以外的状态一起使用,以避免像您这样的混淆。

于 2015-02-04T14:18:13.830 回答
1

422 可能更适合 API 接口,但如果您希望最终用户到达正确的位置,您应该使用 302。

于 2013-04-18T19:09:05.640 回答