2013-04-18 30 views
0

当我这样做:如何停止的node.js 422(无法处理的实体)转出的中间页

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是对发生的更准确的描述。

任何想法?非常感谢

回答

2

及其与3开始状态代码是什么让浏览器重定向(wikipedia),所以自然不能同时拥有HTTP重定向和422状态码。你有一些选择在这里:

  1. 返回3xx状态
  2. 返回422种状态,并没有重定向
  3. 返回任何状态,并使用javascriptmeta tag执行重定向

我建议你选择2:

  1. 如果你正在构建API,你不希望任何HTTP重定向只是inf Ø什么地方出了错
  2. 如果你正在构建Web应用程序是很常见的做法成功时重定向并留下表格时出现了错误填写错误(对不起,对没有源,也许有人可以帮忙吗?)

方法redirect只是一个方便的设置状态302(虽然你可以覆盖它,如你的例子)和Location标题。应该禁止以3xx以外的状态使用它,以避免混淆,例如您的。

1

422可能是更适合的API接口,但如果你想最终用户在合适的地方结束了,你应该使用302

相关问题