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

Node.js中Socket调用setTimeout报ERR_INVALID_CALLBACK问题排查

问题分析与解决方案

这个报错的原因其实非常明确,咱们一步步拆解来看:

1. 错误的直接根源

你调用req.connection.setTimeout(60 * 1000, null)时传入的第二个参数null不符合当前Node.js版本的API要求。从报错信息TypeError [ERR_INVALID_CALLBACK]: Callback must be a function. Received null就能看出来:现在的Node.js要求setTimeout的回调参数必须是一个函数,不能是null。

2. 为什么之前调用成功?

这是因为你之前使用的是较低版本的Node.js——早期的Node.js对这个API的参数校验比较宽松,允许传入null或者直接省略回调参数。但Node.js在后续版本更新中收紧了参数规则,强制要求回调必须是函数类型,所以当你升级Node.js版本后,原来的写法就触发了这个错误。

3. 修复方案(两种可选)

  • 方案一:传入空函数作为回调
    如果你不需要在超时触发时执行任何逻辑,直接传一个空的箭头函数就行:
    req.connection.setTimeout(60 * 1000, () => {});
    
  • 方案二:直接省略回调参数
    实际上setTimeout的第二个回调参数是可选的,你完全可以只传超时时间,这样既达到设置60秒超时的目的,又不会触发参数错误:
    req.connection.setTimeout(60 * 1000);
    

这样修改后,你的代码应该就能正常运行啦~以后遇到这类API参数报错,记得优先对应当前Node.js版本的官方文档确认参数要求哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:04:09