gpt4 book ai didi

node.js - Node : Check for null value is not working

转载 作者:太空宇宙 更新时间:2023-11-03 23:20:18 26 4
gpt4 key购买 nike

在下面的函数中,我解析请求 header 并获取 currentUser 的值。我记录了 currentUser 的值并得到以下结果:

console.log('currentUser', currentUser)
currentUser null

但是 currentUser 的以下条件语句不会计算为 null,并且会执行后续行:

if (!currentUser) {
console.log('\n user not logged in');
res.status(401).json('User not logged in');
}

错误:

TypeError: Cannot read property 'token' of null
at exports.authenticate (sandbox2\nghd09\backend\app\controllers\user.server.controller.js:47:40)
at Layer.handle [as handle_request] (sandbox2\nghd09\node_modules\express\lib\router\layer.js:95:5)

整个函数:

exports.authenticate = function (req, res, next) {
var headerExists = req.headers.authorization;
console.log('authenticate called', headerExists)
var currentUser = req.headers.authorization.split(' ')[1];
console.log('currentUser', currentUser)

if (!currentUser) {
console.log('\n user not logged in');
res.status(401).json('User not logged in');
}

// if (currentUser) {
var token = JSON.parse(currentUser).token;
console.log('\ntoken', token)
jwt.verify(token, config.sessionSecret, function (err, decoded) {
if (err) {
console.log(err);
res.status(401).json('Unauthorized');
} else {
req.user = decoded.username;
req.password = decoded.password;
next();
}
})
// }
}

我已经遵循了几个 Stackoverflow 答案的建议,但没有成功。

最佳答案

由于currentUsersplit的结果,它可以是字符串或undefined。仅当它是 'null' 字符串时才可以记录为 null。造成困惑的原因是,在使用 console.log 输出时,null'null' 无法区分。

But the following conditional statement of the currentUser does not evaluate to null

仅当 currentUser'null' 字符串(或具有返回 'null' 字符串的自定义 toString 方法的任何对象)时,这才有可能。

如果 currentUser'null'JSON.parse(currentUser) 的计算结果为 null,这样就可能出现 Cannot read property 'token' of null 错误。

and subsequent lines are executed

if (currentUser) { 当前已被注释,因此无论 currentUser 为何,它们都会被执行。

该问题可能应该通过事先执行 JSON.parse 来解决:

var currentUser = req.headers.authorization.split(' ')[1];
if (currentUser !== undefined) {
currentUser = JSON.parse(currentUser);
}

if (!currentUser) {
console.log('\n user not logged in');
res.status(401).json('User not logged in');
}

授权 header 中存在 null 的事实是另一个可能应该另外解决的问题。

关于node.js - Node : Check for null value is not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50680765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com