2017-11-28 18 views
1

の不正な要求を取得し、私は(superagentを使用して)以下と同じユーザの電子メールでPOSTのエラー処理を行うようにしようとしています:代わりに、完全なエラーメッセージ

export function signUpUser(userData) { 
    return async dispatch => { 
    try { 
     const currentUser = await request.post(`${url}/signup`).send(userData); 
     set(window.localStorage, 'x-auth', currentUser); 
     dispatch(signUpSuccessObject(userData)); 
    } catch (error) { 
     dispatch(signUpFailObject(error)); 
    } 
    }; 
} 

私は私が見ることができる、以下を取得したいです私のネットワークタブ内:

{ "名": "SequelizeUniqueConstraintError"、 "エラー":[{ "メッセージ": "電子メール は一意でなければなりません"、 "タイプ": "ユニーク 違反"、 "パス":" email "、" value ":" [email protected] "、" origin ":" DB "、" instance ":

しかし、代わりに私が得るすべては次のとおりです。APIのための

不正な要求

マイコントローラ:

User.create(
     Object.assign(req.body, { 
     password: bcrypt.hashSync(req.body.password, 10), 
     }) 
    ) 
     .then(() => { 
     const myToken = jwt.sign({email: req.body.email}, 'leogoesger'); 
     res.status(200).send(myToken); 
     }) 
     .catch(err => res.status(400).send(err)); 
    }, 
+0

ステータス400(別名「バッドリクエスト」)は、(例えば不正な構文、大きすぎるサイズ、など)クライアントのエラーを示しています。特に、検証に失敗したDBフィールドの場合、これは実際にエラーの原因ではありません。別のステータスコードを送り返して、クライアント側でエラーが表示されないことを確認していますか。私の推測では、ブラウザのデフォルトの動作が特定のステータスコードを引き継いで、400がそのうちの一つかもしれないと思いますか? – Jaxx

+0

あなたのような状況にどのようなステータスコードを使用するかは、議論の余地があります。 https://stackoverflow.com/questions/19671317/400-bad-request-http-error-code-meaning-非常に興味深い回答とコメントがあります。 – Jaxx

+1

ディスパッチで問題が発生しました。私が使ったはずのものは 'error.response'です。 'onSuccess'の場合とは違って動作するのは変です。 – Leogoesger

答えて

1

res.send()は、プレーンtext/html応答を送信します。

JSON APIにはres.json(myToken)res.status(400).json(err)を使用してください。

0

https://github.com/visionmedia/superagent/issues/1074

^^リファレンスとしてこれを使用します。

基本的にはerror.responseが必要です。これにより、オブジェクト全体が表示され、エラーメッセージにアクセスできるようになります。

だから、完全に動作するコードは次のようになります。

export function signUpUser(userData) { 
    return async dispatch => { 
    try { 
     const currentUser = await request 
     .post(`${url}/signup`) 
     .send(userData) 
     .type('json'); 
     set(window.localStorage, 'x-auth', currentUser); 
     dispatch(signUpSuccessObject(userData)); 
    } catch (e) { 
     dispatch(signUpFailObject(e.response.body)); 
    } 
    }; 
} 
関連する問題