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

Node.js+Express部署Cpanel报错:Object.fromEntries is not a function

Node.js部署到Cpanel(Node 14.20.1)出现Object.fromEntries is not a function报错排查

问题概述

本地运行正常的Node.js应用,部署到运行Node 14.20.1的Cpanel服务器时触发Object.fromEntries is not a function报错,栈追踪指向/home/joshgncd/riverbank.app/auth/index.js:435:5,但对应路由处理函数未直接调用该方法;替换Notion API请求为Axios后,报错依旧。

报错栈追踪:

at app.post (/home/joshgncd/riverbank.app/auth/index.js:435:5)
at Layer.handle [as handle_request] (/home/joshgncd/nodevenv/riverbank.app/auth/14/lib/node_modules/express/lib/router/layer.js:95:5)
at next (/home/joshgncd/nodevenv/riverbank.app/auth/14/lib/node_modules/express/lib/router/route.js:144:13)
at Route.dispatch (/home/joshgncd/nodevenv/riverbank.app/auth/14/lib/node_modules/express/lib/router/route.js:114:3)
at Layer.handle [as handle_request] (/home/joshgncd/nodevenv/riverbank.app/auth/14/lib/node_modules/express/lib/router/layer.js:95:5)
at /home/joshgncd/nodevenv/riverbank.app/auth/14/lib/node_modules/express/lib/router/index.js:284:15
at Function.process_params (/home/joshgncd/nodevenv/riverbank.app/auth/14/lib/node_modules/express/lib/router/index.js:346:12)
at next (/home/joshgncd/nodevenv/riverbank.app/auth/14/lib/node_modules/express/lib/router/index.js:280:10)
at cors (/home/joshgncd/nodevenv/riverbank.app/auth/14/lib/node_modules/cors/lib/index.js:188:7)

触发报错的路由代码:

app.post('/auth/notion/action', async (req, res) => {
  try {
    const data = req.body
    const tokens = users[req.query.email].notion_tokens
    const notion = new Notion({
      auth: tokens.access_token
    })
    let response = await notion.search(data)
    res.send(response)
  } catch (err) {
    console.trace(err.message)
    res.status(400).send(err.message)
  }
})

排查方向与解决方案

1. 确认实际运行的Node.js版本

Cpanel的nodevenv可能存在版本切换不彻底的情况,登录Cpanel终端执行:

node -v

验证实际运行应用的Node版本是否为14.20.1。若版本低于12.0.0(Object.fromEntries从Node 12.0.0开始支持),需切换到正确的版本环境。

2. 检查依赖包兼容性

报错栈追踪最后指向cors中间件,需检查express、body-parser、cors等核心依赖的版本,确认其是否兼容Node 14.20.1:

  • 查看package.json中的依赖版本,若存在较新版本的依赖,可能内置了仅支持更高Node版本的API调用。
  • 降级依赖到兼容Node 14的稳定版本,例如:
    npm install express@4.18.2 cors@2.8.5 body-parser@1.20.2
    

3. 添加Object.fromEntries Polyfill

若确认Node版本为14.20.1但仍出现兼容性问题,可在应用入口文件(如index.js)顶部添加Polyfill,手动实现该方法:

if (!Object.fromEntries) {
  Object.fromEntries = function(entries) {
    return entries.reduce(function(obj, [key, value]) {
      obj[key] = value;
      return obj;
    }, {});
  };
}

4. 排查隐式调用场景

  • 检查req.body解析逻辑:若使用express.json()或body-parser,某些版本可能在解析请求体时隐式调用Object.fromEntries,需确认解析中间件的配置与版本。
  • 检查users对象构建过程:确认users对象是否通过Object.fromEntries生成,或在访问users[req.query.email].notion_tokens时触发了相关调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:31:10