You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js Express中解构对象报错但console.log正常的问题求助

Express中间件解构对象报错问题

在Express中间件中尝试解构对象时遇到错误,代码如下:

const checkIfLoggedIn = (req, res, next) => {
    try {
        const { token } = req.cookies['jwt-auth'];
        console.log('token: ', token);
        req.token = jwt.verify(token, SECRET);
        next();

    } catch (err) {
        console.error(err);
        res
            .status(401)
            .json({
                ok: false,
                message: 'ERROR: you need to be logged in'
            });
    }
}

应用输出错误信息:

TypeError: Cannot destructure property 'token' of 'req.cookies.jwt-auth' as it is undefined.
    at checkIfLoggedIn (/home/bader/Projects/be_productive/services/authorization.middleware.js:8:17)
    at Layer.handle [as handle_request] (/home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/index.js:328:13)
    at /home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/index.js:286:9
    at Function.process_params (/home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/index.js:346:12)
    at next (/home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/index.js:280:10)
    at cookieParser (/home/bader/Projects/be_productive/node_modules/.pnpm/cookie-parser@1.4.6/node_modules/cookie-parser/index.js:57:14)
    at Layer.handle [as handle_request] (/home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/index.js:328:13)
    at /home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/index.js:286:9
token:  (Token from front-end (I change this line))

明明console.log能正常打印正确的token,尝试用点语法替代解构写法,问题依然存在。


问题原因及解决方案

错误核心是**req.cookies['jwt-auth']为undefined时,你尝试解构它的token属性**。你看到的console.log是来自成功携带jwt-auth cookie的请求,而报错是来自另一个未携带该cookie的请求,两者并非同一个请求的输出,所以会出现“报错但log有值”的矛盾现象。

修复代码

在解构前先检查jwt-auth cookie是否存在:

const checkIfLoggedIn = (req, res, next) => {
    try {
        // 先确认auth cookie存在
        const authCookie = req.cookies['jwt-auth'];
        if (!authCookie) {
            throw new Error('未携带认证Cookie');
        }
        const { token } = authCookie;
        console.log('token: ', token);
        req.token = jwt.verify(token, SECRET);
        next();

    } catch (err) {
        console.error(err);
        res
            .status(401)
            .json({
                ok: false,
                message: 'ERROR: you need to be logged in'
            });
    }
}

额外排查点

  1. 确认cookie-parser中间件挂载顺序是否在这个路由中间件之前(从错误栈看已挂载,但可再检查全局路由配置)。
  2. 排查是否存在未登录请求、跨域请求未配置凭证(withCredentials: true)等场景,导致请求未携带jwt-auth cookie。

内容的提问来源于stack exchange,提问作者Bader

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 23:50:12