Node.js使用prom-client报错TypeError: process.uptime is not a function
process.uptime is not a function错误的方案 嘿,我来帮你理清这个问题!
错误根源
你遇到的问题本质是环境不匹配:process.uptime()是Node.js的内置API,只有在Node.js运行环境(比如你的Express后端)里才存在,但你现在在浏览器环境里执行了这段代码——浏览器根本没有全局的process对象,自然会报这个错。
另外你安装的cluster、dns、repl、node、process这些包都是Node.js的核心模块,前端项目完全不需要安装它们,装了也没法在浏览器里生效,反而可能引入额外问题。
具体解决方案
根据你的项目情况(同时有React前端和Express后端),可以从这几个方向入手:
1. 确保prom-client只在后端Node.js代码中使用
prom-client是为Node.js服务端监控设计的工具,应该只在你的Express后端逻辑里引入和使用,不要在React组件或前端代码里加载它。把所有和prom-client相关的指标收集、暴露接口都放在后端代码里,前端完全不碰这部分逻辑。
2. 禁用prom-client中依赖Node.js API的默认指标
如果你因为某些原因必须在前端环境使用prom-client,可以禁用它默认提供的、依赖Node.js进程API的指标(比如process_start_time_seconds)。初始化prom-client时可以这样配置:
const client = require('prom-client'); // 收集默认指标,但禁用进程相关的那些 client.collectDefaultMetrics({ collectors: { processStartTime: false, // 就是报错的这个指标 processUptime: false, heapSize: false, // 其他你不需要的Node专属指标也可以关掉 } });
3. 替换浏览器兼容的实现(如果必须保留该指标)
如果一定要在浏览器里模拟process.uptime()的功能,可以用浏览器的performance API来替代。比如把process.uptime()替换为:
// 浏览器环境下,计算页面加载到当前的时间(秒) const uptimeInSeconds = performance.now() / 1000;
你可以自己封装一个兼容环境的指标实现,不推荐直接修改prom-client源码。
总结
核心思路就是让prom-client在正确的环境里运行:要么把它完全放在后端Node.js代码中,要么在前端使用时禁用/替换那些依赖Node.js专属API的功能。别再安装那些Node核心模块到前端项目里了,完全没用哦~
内容的提问来源于stack exchange,提问作者Manish Kumar

