簡體   English   中英

用JavaScript(ES6)承諾

[英]promises in javascript ( ES6 )

如何將狀態代碼為ok的Promise reject()錯誤從500更改為200?

在某些情況下,當我嘗試拒絕時,總是會在前端收到500錯誤。

export default function login(req, res) {
return new Promise((resolve, reject) => {
passport.authenticate( 'local', function authenticate(err, user, info){
  if(err)  reject(err);
  if(!user) reject(info);

  req.logIn(user, err, info => {
    if(err) { reject(err) }
    else {
      resolve(user);
    }
  })
})(req, res);
});
}

錯誤: Status Code:500 Internal Server Error

500是一個HTTP錯誤,不是由您的諾言產生的,而是從服務器返回的錯誤。

如果要避免500錯誤,最好的解決方案是弄清楚為什么在后端收到該錯誤並在此修復,因為500通常表示拋出了未捕獲的異常。

但是,如果您要假裝一切正常,則可以忽略代碼中的500錯誤,並返回不是生成的錯誤的內容:

if (err)
  reject(true);

然后,在Promise的catch塊中,您可以:

login(...)
  .catch(function(e) {
    if (e === true)
      // pretend everything is okay
    else
      ...
  })

如果您拒絕,則狀態代碼不應為200 OK,但是如果您要這樣做,則需要在發送回響應之前進行操作,

這里,

res.status(200).send('Something broke!');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM