我正在尝试使用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)
}
}````
答案 0 :(得分:0)
在'/api/add'
路由中,您要在同一请求上同时呼叫res.send()
和res.json()
。这将导致您看到有关已发送的标头的错误。
选择一个或另一个,因为每个HTTP请求只能发送一个响应。
此外,您还存在异步问题,并且缺乏对数据库调用的错误处理程序处理。您需要将第二个代码块嵌套在数据库回调中,以便对它们进行适当的排序,并且如果从数据库中获取错误,则需要实际发送错误响应。
答案 1 :(得分:0)
此处您在api res.send()和res.json()中使用两个响应,请仅发送一个请求响应。