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

Express.js中间件JWT Token过期处理异常求助

解决前端无法处理JWT过期401响应的问题

一、修复前端代码语法错误

你的fetch请求代码存在语法闭合问题,导致逻辑无法正常执行,同时可以优化响应判断逻辑:

const checkToken = async () => {
  try {
    const response = await fetch('http://localhost:3000/admin/register', {
      method: 'GET',
      credentials: 'include' 
    });

    // 统一处理所有非2xx状态码的响应
    if (!response.ok) {
      const data = await response.json();
      if (data.code === 'TOKEN_EXPIRED') {
        window.location.href = data.redirectTo;
      } else {
        console.error('Error:', data.message || 'Unknown error');
      }
      throw new Error(data.message || 'Request failed');
    }

    // 请求成功后的业务逻辑
    const result = await response.json();
    console.log('Request succeeded:', result);
  } catch (error) {
    // 捕获网络错误或JSON解析失败的情况
    console.error('Fetch error:', error);
  }
};

二、检查服务器端CORS配置

如果前端与服务器跨域,必须正确配置CORS才能让浏览器正常接收响应,否则会被拦截:

const cors = require('cors');

app.use(cors({
  origin: 'http://前端域名:端口', // 例如'http://localhost:8080',不能设为*
  credentials: true, // 允许携带Cookie
  allowedHeaders: ['Content-Type']
}));

三、验证服务器端中间件逻辑

确保中间件在返回错误响应后终止请求流程,避免后续代码干扰:

const jwt = require('jsonwebtoken');

const authMiddleware = (req, res, next) => {
  const token = req.cookies.jwtToken; // 替换为你的Cookie名称
  if (!token) {
    return res.status(401).json({ message: 'No token provided', code: 'NO_TOKEN' });
  }

  jwt.verify(token, process.env.JWT_SECRET, (err, decoded) => {
    if (err) {
      if (err.name === 'TokenExpiredError') {
        console.error('JWT expired:', err);
        return res.status(401).json({ 
          message: 'JWT expired', 
          code: 'TOKEN_EXPIRED', 
          redirectTo: '/login' 
        });
      }
      console.error('JWT verification failed:', err);
      return res.status(401).json({ 
        message: 'JWT verification failed', 
        code: 'TOKEN_INVALID' 
      });
    }
    req.user = decoded;
    next();
  });
};

四、调试步骤

  • 打开浏览器开发者工具的网络面板,查看请求的响应状态和响应体,确认服务器是否返回了预期的JSON。
  • 在前端!response.ok分支中添加console.log(data),打印返回的完整数据,确认code字段是否正确。
  • 检查控制台是否有跨域错误提示,优先解决CORS配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 14:47:43