错误错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后,无法设置标头

时间:2020-09-08 04:23:13

标签: mysql node.js jwt

我正在尝试使用mysql和nodejs进行身份验证,并且在终端中返回错误[ERR_HTTP_HEADERS_SENT]:将标头发送到cli后无法设置标头 耳鼻喉科。我该怎么解决?

res.json({
     text:'protected'
});
});
app.post('/api/add',(req,res)=>{
    const sql = 'INSERT INTO users SET ? ';
    const userOBJ ={
        users:req.body.name,
        fullname:req.body.fullname,
        email:req.body.email,
        telephone:req.body.telephone,
        password:req.body.password

    };
    connection.query(sql,userOBJ,err=>{
        if(err)throw err;
    
        res.send('added customer');
    })
    jwt.sign({user:userOBJ},'users',(err,token)=>{
        res.json({
            token
        })
    }
    )
   
    
});
function verifyToken(req,res,next){
    const bearerHeader =req.headers ['authorization']
    if(typeof bearerHeader !=='undefined'){
   const bearerToken= bearerHeader.split(' ')[1] 
   req.token =bearerToken
   next()
    }else{
        res.sendStatus(403)
    }
}````

2 个答案:

答案 0 :(得分:0)

'/api/add'路由中,您要在同一请求上同时呼叫res.send()res.json()。这将导致您看到有关已发送的标头的错误。 选择一个或另一个,因为每个HTTP请求只能发送一个响应。

此外,您还存在异步问题,并且缺乏对数据库调用的错误处理程序处理。您需要将第二个代码块嵌套在数据库回调中,以便对它们进行适当的排序,并且如果从数据库中获取错误,则需要实际发送错误响应。

答案 1 :(得分:0)

此处您在api res.send()和res.json()中使用两个响应,请仅发送一个请求响应。