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

调用split时触发Cannot read properties of undefined错误求助

问题:Cannot read properties of undefined (reading 'split') 错误排查

我遇到了如下错误:Cannot read properties of undefined (reading 'split')。控制台报错信息见截图,点击错误链接后,定位到browser.umd.js文件的对应代码行。以下是我的JWT验证中间件代码,请问有人能指出问题所在吗?

const verifyJwt = (req,res,next) => {
    console.log('entered middle');
    let name = 'token=';
    const header = req.headers['cookie'];
    const token = header && header.split('=')[1];
    if (!token) return res.status(401).send({msg: "Login first please!"})
    jwt.verify(token, process.env.TOKEN_KEY, (err, user) => {
      if(err) return res.status(403).send({msg:"Not authoraized"})
      next();
    });
}

module.exports = verifyJwt

问题分析与解决方案

错误根源

报错提示调用split的对象是undefined,结合你的代码和场景,主要有两个可能:

  1. 手动解析Cookie的逻辑存在漏洞:直接用split('=')无法处理多Cookie共存的场景(比如Cookie格式为token=xxx; name=yyy),且虽然用了短路逻辑,但极端场景下仍可能触发未校验的split调用;
  2. 你引入的JWT库版本不对:后端环境应使用Node.js版本的jsonwebtoken,而非前端版本的browser.umd.js,这可能是报错指向该文件的核心原因。

修复方案

推荐使用cookie-parser中间件来解析Cookie,彻底避免手动解析的问题:

  1. 先安装依赖:
npm install cookie-parser
  1. 在主服务文件中引入并启用中间件:
const cookieParser = require('cookie-parser');
const express = require('express');
const app = express();

app.use(cookieParser());
  1. 修改JWT验证中间件:
const verifyJwt = (req,res,next) => {
    console.log('entered middle');
    // 直接从解析后的cookies对象中获取token
    const token = req.cookies.token;
    if (!token) return res.status(401).send({msg: "Login first please!"})
    
    jwt.verify(token, process.env.TOKEN_KEY, (err, user) => {
      if(err) return res.status(403).send({msg:"Not authorized"})
      // 可选:将用户信息挂载到req上,供后续路由使用
      req.user = user;
      next();
    });
}

module.exports = verifyJwt

如果不想用第三方中间件,也可以手动严谨解析Cookie:

const verifyJwt = (req,res,next) => {
    console.log('entered middle');
    const cookieHeader = req.headers['cookie'];
    let token = undefined;
    
    if (cookieHeader) {
        // 分割多Cookie并去除首尾空格
        const cookies = cookieHeader.split(';').map(item => item.trim());
        // 精准匹配token对应的Cookie项
        const tokenItem = cookies.find(item => item.startsWith('token='));
        if (tokenItem) {
            token = tokenItem.split('=')[1];
        }
    }
    
    if (!token) return res.status(401).send({msg: "Login first please!"})
    
    jwt.verify(token, process.env.TOKEN_KEY, (err, user) => {
      if(err) return res.status(403).send({msg:"Not authorized"})
      next();
    });
}

module.exports = verifyJwt

额外提示

  • 你代码里有拼写错误:Not authoraized应改为Not authorized;
  • 确认JWT依赖安装正确:执行npm install jsonwebtoken,引入时用const jwt = require('jsonwebtoken'),避免使用前端版本的库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:15:44