2017-04-05 12 views
1

約束事を変更するにはreject()エラーは500から200にステータスコードはOKですか?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エラーを無視して、生成されたエラーではない何かを返すことができます:あなたの約束のcatchブロック内で次に

if (err) 
    reject(true); 

を、あなたはできます:

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

あなたが拒否している場合は、あなたがそれをしたい場合は、ステータスコードはまだ200 OKはなくてはならない、 あなたが戻って応答を送信する直前にそれを実行する必要があるが、ここで

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