2017-04-05 90 views
1

如何更改承諾reject()錯誤從500到200與狀態代碼好嗎?承諾在JavaScript(ES6)

總是當我試圖拒絕在某些情況下,我得到前端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

+2

你也許應該解決你的服務器代碼中的500錯誤 – Weedoze

回答

2

500是一個HTTP錯誤,不是這是由你的承諾產生的,而是一些東西,返回從你的服務器。

如果你想避免500錯誤,最好的解決方案是找出爲什麼你在後端得到這個錯誤並修復它,因爲500通常意味着拋出一個未捕獲的異常。

但是,如果你想假裝一切都沒有問題,你可以忽略你的代碼中的500錯誤並返回一些東西,是不是生成的錯誤:

if (err) 
    reject(true); 

然後你承諾的catch塊內,你可以:

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

如果您拒絕則狀態代碼不應該是200 OK,但仍,如果你想這樣做, 你需要做它,你發回響應之前,

這裏,

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