【问题标题】:Undefined value for request object请求对象的未定义值
【发布时间】:2021-06-24 23:36:48
【问题描述】:

NodeJS 有问题。

我创建了一个中间件,用于检查请求中是否存在 cookie 中的 JWT,并尝试对其进行验证。

问题是,我试图将 JWT 分配给一个变量并导航到例如“localhost:80/index”,NodeJS 返回一个错误:

“TypeError:无法读取未定义的属性'jwt'”。

中间件的名称是“authenticateToken”。

这是 app.js 中的路由:

app.get('/index', authenticateToken, (req, res) => { res.render('index'); });

我正在传递这个中间件:

const jwt               = require('jsonwebtoken');

function authenticateToken(req, res, next) {

    var token = req.cookies.jwt;

    if (token) {
        
        jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, function(err, decodedToken) {

            if (err) {

                console.log(err.message);
                res.redirect('/login');

            }
            else {

                console.log(decodedToken);

                next();
            }
        });
    }
    else {
        res.redirect('/login');
    }

    
}

module.exports = { authenticateToken };

【问题讨论】:

    标签: node.js express jwt


    【解决方案1】:

    错误表明req 对象没有cookies 字段,因此当您尝试获取cookie 对象的'jwt' 字段时,这是一个空引用异常。

    您可以使用 Node 中的 Optional ChainingNullish Coalescing Operator 功能来避免这种 NRE。

    假设当一切正常时cookies 字段将存在于req 并且它是一个具有jwt 字段的对象,那么您可以这样做:

    var token = req.cookies?.jwt ?? undefined;

    【讨论】:

    • cookie 确实存在。当我执行“console.log(req.headers.cookie)”时,它会输出 cookie,但是当我执行“console.log(req.cookies)”时,它会显示未定义。
    • req.headers.cookiereq.cookies 不同。 req.headers.cookie 是否包含您的 jwt 对象?
    【解决方案2】:

    解决了!

    解决方案是添加“app.use(cookieParser());”在 app.js 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 2019-06-17
      • 2017-07-19
      • 1970-01-01
      相关资源
      最近更新 更多