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

如何避免代码中多个else分支?登录校验代码优化需求

简化登录校验与重定向代码的方案

嘿,你的问题太常见啦——多层嵌套的if-else确实会让代码变得臃肿又难读,咱们用**提前返回(Early Return)**的技巧就能轻松消除重复的else分支,让逻辑清爽很多!

优化后的代码

static async getInitialProps(context, apolloClient) {
  const { req } = context;
  const initProps = {};

  // 先检查请求头是否存在,不满足直接重定向返回
  if (!req?.headers) {
    redirect(context, '/login');
    return initProps;
  }

  const cookies = req.headers.cookie;
  // 检查cookies是否为有效字符串,不满足直接重定向返回
  if (!cookies || typeof cookies !== 'string') {
    redirect(context, '/login');
    return initProps;
  }

  const cookiesJSON = jsHttpCookie.parse(cookies);
  const authToken = cookiesJSON['auth-token'];
  // 检查token是否存在,不满足直接重定向返回
  if (!authToken) {
    redirect(context, '/login');
    return initProps;
  }

  // 最后处理token验证逻辑
  try {
    const decoded = jwt.verify(authToken, secret);
    initProps.id = decoded.id;
    initProps.token = authToken;
  } catch (error) {
    console.error(error);
    redirect(context, '/login');
  }

  return initProps;
}

关键改进说明

  • 提前返回拆解嵌套:把所有不满足校验的情况(比如无请求头、无效cookies、无token)都放在代码最前面处理,直接重定向并返回,让核心的token验证逻辑脱离多层if嵌套,一眼就能看懂。
  • 同步化token验证:原代码用了jwt.verify的回调版本,改成同步的try-catch写法后,逻辑更连贯,也避免了回调嵌套的问题(同步版验证失败会抛出错误,用try-catch捕获即可)。
  • 消除重复代码:所有触发重定向的逻辑都拆成独立的检查步骤,再也不用在多个else里重复写redirect了。
  • 可读性大幅提升:每一步校验的目的都清晰分离,后续维护代码的人能快速理清整个校验流程。

如果你的redirect函数本身会终止后续代码执行,后面的return initProps可以根据实际情况调整,但保留它会更稳妥,避免出现意外的代码执行情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:34:15