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

Node.js斐波那契接口传n=9报Maximum call stack size exceeded的原因是什么?

报错原因分析

核心诱因

你遇到的栈溢出问题不是n=9的合法请求触发的,而是浏览器默认发送的favicon.ico图标请求导致的,结合代码逻辑漏洞形成了无限递归:

  • 参数校验存在疏漏:当请求没有携带n参数时,qdata.n为undefined,parseInt(undefined)返回NaN,而NaN <= 0的判断结果为false,会直接进入斐波那契计算逻辑。
  • 非法入参触发无限递归:NaN传入斐波那契函数后,num <= 1的判断永远返回false,函数会持续递归调用fibonacci(NaN - 1)(结果还是NaN),递归没有终止条件,最终抛出栈溢出错误。

你查看服务端打印的console.log(n)输出,会发现除了你传入的9之外,还会输出一个NaN,就是favicon.ico请求对应的参数值。

修复方案

  1. 完善参数校验逻辑,将原有校验代码:
if (n <= 0)

修改为:

if (isNaN(n) || n <= 0)

确保非法数值参数直接返回错误。

  1. 增加无效请求过滤,在解析url后新增favicon请求拦截逻辑:
let parsedUrl = url.parse(req.url, true);
// 新增favicon请求拦截
if (parsedUrl.pathname === '/favicon.ico') {
  res.end();
  return;
}
var qdata = parsedUrl.query;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:45:01