为啥显示此错误?发送到客户端后无法设置标头
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 不起作用以上是关于为啥显示此错误?发送到客户端后无法设置标头的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不断收到“错误 [ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头”错误?
NodeJS "发送到客户端 NodeJS 后无法设置标头"