2016-09-01 6 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() 모두를 사용하고 있습니다.

하나만 사용해야합니다. 당신은 JSON 응답과 함께 상태를 보내려면

, 당신이 시도 할 수 있습니다 :

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

또한, 200의 상태가 default 등등 res.send, res.json를 사용할 때 status 200을 보낼 필요가없는 그래서 res.json()

+0

답장을 보내 주셔서 감사합니다. Ravi! – Hiero

1

res.json() 오브젝트를 클립 보드에 보내면 상태 코드로 헤더를 설정하려고합니다. 그러면 오류 메시지가 표시됩니다. 다음 코드를 사용하여 상태를 설정하고 동시에 콘텐츠를 전송하십시오.

res.status(500).json({ error: 'message' } /* json object*/); 
관련 문제