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

Mongoose Get请求返回favicon.ico而非指定值,Heroku部署遇H13崩溃

问题解决思路

1. 拦截favicon.ico请求,避免被通配路由捕获

浏览器会自动向服务器发起/favicon.ico请求,而你的/:titleName通配路由会把favicon.ico当作titleName参数处理。解决方法是在通配路由之前添加专门的拦截路由:

app.get('/favicon.ico', (req, res) => res.sendStatus(204));

204状态码表示无内容,不会触发后续的通配路由逻辑。如果有自定义图标,也可以返回对应文件。

2. 修复路由中的异步操作与错误处理

你的代码存在两个可能导致Heroku H13错误的问题:

  • list.save()是异步操作,直接调用后立即执行redirect,可能数据库还未完成写入就跳转,引发请求异常
  • 未处理数据库查询出错的情况,当err存在时没有返回任何响应,会导致请求挂起,最终触发H13连接断开错误

修改后的路由代码:

app.get("/:titleName", function (req, res) {
  const defaulttitleName = _.capitalize(req.params.titleName);
  
  List.findOne({ name: defaulttitleName }, function (err, foundList) {
    if (err) {
      // 处理查询错误,返回500状态码
      return res.status(500).send("获取列表失败");
    }
    
    if (!foundList) {
      const list = new List({
        name: defaulttitleName,
        items: defaultItems,
      });

      // 等待保存完成后再执行跳转
      list.save(function(saveErr) {
        if (saveErr) {
          return res.status(500).send("保存列表失败");
        }
        res.redirect("/" + defaulttitleName);
      });
    } else {
      res.render("list", {
        listTitle: foundList.name,
        newListItems: foundList.items,
      });
    }
  });
});

3. 额外检查点

  • 确认Heroku环境已正确配置MongoDB连接字符串,数据库连接失败也可能引发H13错误
  • 通过heroku logs --tail查看Heroku日志,定位H13错误的具体触发场景,排查是否存在其他未处理的请求挂起情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:55:30