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

Heroku部署Node.js Express MongoDB应用报H12请求超时错误如何解决?

问题修复方案

以下是你代码中导致H12超时错误的核心问题及修复方法:

  • Mongoose未导入且数据库连接函数未执行
    你代码中导入mongoose的语句被注释,同时定义的connectDB异步函数从未被调用,导致应用启动后没有连接MongoDB。首页请求到达时,homeController需要查询数据库数据,请求一直挂起直到超过Heroku的30秒超时阈值,触发H12错误。
    修复操作:取消const mongoose = require('mongoose')语句的注释,在connectDB函数定义完成后新增一行connectDB()调用函数。
  • 全局登录状态中间件配置错误
    首先你将全局登录状态赋值的中间件放在了所有路由定义之后,请求匹配到路由时该中间件还未执行;其次访问session的写法错误,正确的session属性挂载在req.session下而非req.expressSession。
    修复操作:将该中间件移到expressSession配置代码之后、所有路由定义之前,同时将loggedIn = req.expressSession.userId;修改为loggedIn = req.session.userId;。
  • express-fileupload中间件用法错误
    你写的app.use(fileUpload);没有调用中间件构造函数,正确用法为app.use(fileUpload());,未执行调用会导致涉及文件上传的请求逻辑卡住。
  • 单篇文章路由定义错误
    路由app.get('/post:id', getPostController)缺少路径分隔符,无法匹配单篇文章的访问路径,正确写法为app.get('/post/:id', getPostController)。
  • express-session生产环境配置缺失
    你当前的express-session配置使用默认内存存储,生产环境下内存存储容量有限、多实例同步异常,且未配置resave、saveUninitialized参数会抛出警告。建议补充配置:将session密钥存入Heroku的config vars,修改session配置为:
    app.use(expressSession({
        secret: process.env.SESSION_SECRET || 'keyboard cat',
        resave: false,
        saveUninitialized: false
    }))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:00:00