node.js - 为什么显示此错误?发送到客户端后无法设置标头
问题描述
这是我的登录代码:你可以从这里看到令牌,下一张照片是令牌的身份验证,谁能解释一下............ ..................................................... .....................................................
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'
})
}
})
解决方案
如果您查看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 可以帮助您避免这些疏忽
推荐阅读
- javascript - Javascript:使用过滤器复制数组
- sql - 从 Varchar 中删除起始字符
- python - 如何根据纹理分割此图像?
- javascript - JS 外部函数在 HTML 页面中不可见
- javascript - 在 app.get() 中调用时,导出的函数返回“未定义”
- regex - 如果不是 255/255,则为文本编写正则表达式模式
- r - 在Matlab中以与R的bs()函数相同的方式计算B样条基
- installation - Hyperledger Fabric 中的 GOPATH
- javascript - 表格行的剪贴板副本
- firebase - 在聊天应用程序中响应本机通知