首页 > 解决方案 > 为什么显示此错误?发送到客户端后无法设置标头

问题描述

发生错误

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

    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'
            })   
        }
    })

标签: node.jsmongodbjwtsettoken

解决方案


如果您查看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'
      })
    }
  }

在中添加return语句if(err)

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


推荐阅读