2016-09-01 89 views
0

我有一個NodeJS Rest API,我有一個用戶集合,除此之外,我做用戶SMS驗證。錯誤:發送後無法設置標題。 - 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

您同時使用res.json()res.sendStatus()兩者一起,他們都發回response,這就是爲什麼它表明Can't set headers after they are sent錯誤。

你應該只使用其中的一個。使用res.sendres.json等,當所以你不需要發送status 200

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

而且,200狀態爲default

如果你想用JSON響應一起發送狀態,你可以試試這個與res.json()

+0

感謝您的回答Ravi! – Hiero

1

res.json()將對象發送給clilent,然後嘗試使用狀態碼設置標題。所以,它顯示錯誤信息。使用以下代碼設置狀態並同時發送內容。

res.status(500).json({ error: 'message' } /* json object*/); 
相關問題