2013-04-18 64 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

相關問題