为啥显示此错误?发送到客户端后无法设置标头

Posted

技术标签:

【中文标题】为啥显示此错误?发送到客户端后无法设置标头【英文标题】:why this error is showing? cant set header after they sent to the client为什么显示此错误?发送到客户端后无法设置标头 【发布时间】:2021-08-19 11:02:12 【问题描述】:

这是我的登录代码:您可以从这里看到令牌,下一张照片是令牌的身份验证 谁能解释一下...................................................... ..................................................... .....................................

    const login = (req, res, next) => 
    var username = req.body.username;
    var password = req.body.password;
    

    User.findOne($or: [email: username, phoneNumber: username])
    .then(user => 
        if (user) 
            bcrypt.compare(password, user.password, function(err, result)
                if (err) 
                    res.json(
                        title: 'Server error',
                        error: err
                    )
                    console.log('err');
                if (result)
                    const maxAge = 24 * 60 * 60
          const createToken = jwt.sign( _id: user._id  , process.env.TOKEN_SECRET,  expiresIn: maxAge );

              res.header('auth-token',token);

                    
                else
                    return res.status(401).json(
                        title: 'password wrong',
                        error: 'invalid credentials'
                    )
                
            )
        
        else 
            return res.status(401).JSON(
                title: 'password wrong',
                error: 'invalid credentials'
            )   
        
    )

【问题讨论】:

查看类似问题Error: Can't set headers after they are sent to the client 【参考方案1】:

如果您查看bcrypt.compare 回调,res.json 会执行两次:

  function(err, result) 
    if (err) 
      res.json() // ONE
     
    if (result) 
      // skipped
     else 
      return res.status(401).json( // TWO
        title: 'password wrong',
        error: 'invalid credentials'
      )
    
  

if(err)中添加return语句

使用 linter 可以帮助您避免这些疏忽

【讨论】:

我删除了一个并尝试添加 return 但 id 不起作用

以上是关于为啥显示此错误?发送到客户端后无法设置标头的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 发送到客户端后无法设置标头

发送到客户端后无法设置标头

为啥我不断收到“错误 [ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头”错误?

NodeJS "发送到客户端 NodeJS 后无法设置标头"

Post Request express:发送到客户端后无法设置标头

ERR_HTTP_HEADERS_SENT - Express:标头在发送到客户端后无法设置,我该如何解决这个错误?