2016-09-01 58 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*/); 
相关问题