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

Node.js+GraphQL+MongoDB+Flutter应用部署到Heroku后崩溃,启动时提示找不到GraphQL相关模块

Node.js+GraphQL+MongoDB+Flutter应用部署到Heroku后崩溃,启动时提示找不到GraphQL相关模块

伙计,别慌,这种隔了一年重启旧项目、更新依赖后踩坑的情况太常见了,咱们一步步来排查解决。

首先看你Heroku日志里的核心错误:

Error: Cannot find module '../polyfills/symbols.js'

这个问题90%是依赖版本不兼容导致的——你更新了所有依赖,但express-graphql和graphql的版本可能不匹配,旧版的express-graphql会依赖graphql里的一些旧文件,而新版graphql已经移除了这些文件(比如polyfills/symbols.js)。

第一步:修复GraphQL依赖兼容问题

  1. 锁定兼容的版本组合
    打开你的package.json,把graphql和express-graphql改成经过验证的兼容版本。比如:

    • 如果继续用express-graphql,可以搭配express-graphql@0.12.0 + graphql@15.8.0
    • 或者更推荐换掉已经被弃用的express-graphql,改用apollo-server-express(维护更活跃,兼容性更好),只是需要你稍微调整下服务器代码。
  2. 清理本地依赖,重新安装
    先删掉本地的依赖缓存,避免旧版本干扰:

    rm -rf node_modules package-lock.json
    npm install
    

    (如果用yarn,就删node_modules yarn.lock然后跑yarn install)

  3. 清除Heroku缓存,重新部署
    Heroku有时候会缓存旧依赖,导致新依赖没正确安装,执行下面的命令清缓存再部署:

    heroku plugins:install heroku-repo
    heroku repo:purge_cache -a mvp-timelyst
    git commit --allow-empty -m "Purge Heroku cache"
    git push heroku main
    

第二步:解决本地node app.js的MongoDB认证错误

你说nodemon能启动,但直接跑node app.js会报MongoDB bad auth,这大概率是环境变量加载问题:

  • nodemon可能自动加载了你的.env文件,而直接跑node app.js时没有加载,导致MongoDB的用户名密码没正确读取。
  • 解决办法:确保app.js开头引入dotenv包并加载环境变量:
    require('dotenv').config();
    
    或者启动时手动加载:
    node -r dotenv/config app.js
    
  • 另外检查MongoDB URI格式:如果是Atlas的URI,密码里的特殊字符(比如@、#、$)要做URL编码,比如@换成%40。
  • 最后检查驱动版本:如果更新了mongoose或mongodb包,旧连接配置可以加上兼容选项:
    mongoose.connect(process.env.MONGODB_URI, {
      useNewUrlParser: true,
      useUnifiedTopology: true
    });
    

第三步:模拟器的GraphQL错误

这个问题是服务器没正常启动导致的,等前面两个问题解决后,服务器稳定运行了,模拟器的GraphQL请求就能正常响应,错误自然会消失。

按照上面的步骤一步步来,应该能解决你的问题,如果还有问题,可以再核对下Heroku的环境变量是否全部配置正确(比如MongoDB URI、端口这些)。

备注:内容来源于stack exchange,提问作者Maria Donosova

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:42:42