关于javascript:如何停止显示中间页面的node.js 422(不可处理的实体)重定向

How can I stop node.js 422 (unprocessable entity) redirects showing an intermediary page

当我这样做的时候:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 node response page

我该如何阻止它这样做?我不想显示一个需要用户点击链接到目的地的页面,我只想点击链接到目的地。我可以使用302代码响应,但是422是对正在发生的事情的更准确的描述。

有什么想法吗?谢谢


它的状态代码以3开头,这是浏览器重定向(wikipedia)的原因,因此自然不能同时使用http重定向和422状态代码。您可以选择:

  • 返回3xx状态
  • 返回422状态,不进行重定向
  • 返回任何状态并使用javascript或meta标记执行重定向
  • 我建议选择2:

  • 如果您正在构建API,则不需要任何HTTP重定向,只需要了解出错的信息。
  • 如果您正在构建Web应用程序,通常的做法是在成功时重定向,并在出错时在表单中填写错误(对此没有任何来源感到抱歉,也许有人能提供帮助?)
  • 名为redirect的方法只是设置状态302Location头的便利(尽管您可以像在示例中那样重写它)。不允许将其与3xx以外的状态一起使用,以避免混淆,如您的。


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