2016-09-01 4 views
0

私はユーザーのSMS検証を行う以外に、ユーザーコレクションを持っているNodeJS Rest APIを持っています。 エラー:送信後にヘッダーを設定できません。 - NodeJSとExpress

この

はPOST /:id/verification

exports.verification = (req, res) => { 

    const id = req.params.id 

    return User.find(id) 
    .then(user => { 

     if (user.code !== req.body.code) { 

     res.json({ message: 'Incorrect code' }) 

     res.sendStatus(500) 

     return 

     } 

     user.isVerified = true 

     user.save(error => { 

     if (error) { 

      res.json({ message: 'Failed to update user' }) 

      res.sendStatus(500) 

      return 

     } 

     res.json({ user }) 

     res.sendStatus(200) 

     }) 

    }) 
    .catch(error => { 

     res.json({ error }) 

    }) 

} 

ためのコントローラである。しかし事は、私が/:id/verificationに投稿するとき、私は、この行では、このエラー

Error: Can't set headers after they are sent. - NodeJS and Express

を得ることです:

res.json({ user }) 
res.sendStatus(200) 

しかし、なぜ私は理解していない、私はこれの前に応答を送信しないでください。

誰かが間違っていることを私に説明できますか?

答えて

3

あなたはそれがCan't set headers after they are sentというエラーが表示されている理由があり、それらの両方が戻ってresponseを送って、一緒に両方res.json()res.sendStatus()の両方を使用しています。

これらのうちの1つのみを使用してください。

あなたはJSONレスポンスと一緒にステータスを送信したい場合、あなたはこれを試すことができます。

res.status(500).json({ message: 'Incorrect code' }); 

res.sendres.jsonを使用する場合にも、200のステータスがdefaultある、などあなたはstatus 200を送信する必要がいけないのでwith res.json()

+0

あなたの答えはありがとうRavi! – Hiero

1

res.json()は、クリライズにオブジェクトを送信し、その後、ステータスコードでヘッダーを設定しようとしています。そのため、エラーメッセージが表示されます。ステータスを設定し、同時にコンテンツを送信するには、次のコードを使用します。

res.status(500).json({ error: 'message' } /* json object*/); 
関連する問題