【问题标题】:Nodejs, Mongoose failed to upload to heroku with error code H12, H15. How to fix?Nodejs、Mongoose 无法上传到 Heroku,错误代码为 H12、H15。怎么修?
【发布时间】:2020-09-07 15:59:58
【问题描述】:

我正在尝试将我的 Node、mongoose、express 应用程序托管到 heroku (Pass)。我第一次使用heroku。该应用程序是带有登录系统的基本博客。即使经过数小时的上网和花费大量精力,我也无法托管它。错误日志在这里

2020-05-21T04:16:28.974768+00:00 app[web.1]:     at Object.onceWrapper (events.js:300:26)
2020-05-21T04:16:28.974772+00:00 app[web.1]:     at TLSSocket.emit (events.js:210:5)
2020-05-21T04:16:28.974773+00:00 app[web.1]:     at net.js:659:12
2020-05-21T04:16:28.974773+00:00 app[web.1]:     at TCP.done (_tls_wrap.js:481:7)
2020-05-21T04:16:28.974907+00:00 app[web.1]: (node:23) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
2020-05-21T04:16:28.975048+00:00 app[web.1]: (node:23) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
2020-05-21T04:16:29.327348+00:00 heroku[web.1]: State changed from starting to up
2020-05-21T04:17:05.597713+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/" host=kalovatvatey.herokuapp.com request_id=d997fd6f-7515-4249-b9e7-553ffb60197c fwd="27.34.50.52" dyno=web.1 connect=1ms service=30000ms status=503 bytes=0 protocol=https
2020-05-21T04:17:30.629996+00:00 heroku[router]: at=error code=H15 desc="Idle connection" method=GET path="/robots.txt" host=kalovatvatey.herokuapp.com request_id=a3440026-9dc1-4ffd-a978-d7be5749b4a2 fwd="27.34.50.52" dyno=web.1 connect=1ms service=55028ms status=503 bytes= protocol=https
2020-05-21T04:18:03.329483+00:00 heroku[router]: at=error code=H15 desc="Idle connection" method=GET path="/favicon.ico" host=kalovatvatey.herokuapp.com request_id=7ea70ab2-5ae1-409f-bdab-1d79b3a2a389 fwd="27.34.50.52" dyno=web.1 connect=0ms service=55005ms status=503 bytes= protocol=httpd

git 仓库的链接也在这里 https://github.com/kalovatvatey/Blog

【问题讨论】:

  • 嘿 Hemanta,首先欢迎来到 Stackoverflow 社区。所以我刚刚访问了你的仓库,当然,我访问了你的仓库,并没有太多担心,你写的代码非常干净,我很感激。您是否愿意告诉我,您正在使用什么方法在 Heroku 上上传您的应用程序,例如,您是使用 heroku-CLI 还是使用 github connect 来部署应用程序?
  • 谢谢!我正在使用heroku-CLI。如果我可以使用与 Heroku-CLI 不同的方法,请提出建议。我非常感谢您的回复! :-)
  • 好的 @Hemanta 我正在处理你的仓库,我已经克隆了以更好地理解流程,请注意给我几个小时来解决这个问题。我会尽快发布答案。

标签: javascript node.js express heroku mongoose


【解决方案1】:

克隆您的存储库后,我发现了您在 Heroku 上部署的应用程序的问题。

一个简单的解决方法是运行命令

heroku config:set MONGODB_URI=YOURMONGODBURI

//or If you don't have mongoURI

heroku addons:add mongolab

现在让我简单地告诉你这个问题。

所以你从环境变量中获取了MONGODB_URI,并且由于你没有在你的heroku应用程序中设置配置变量(环境变量),它无法连接到mongo,因此你的服务器最终无法启动您会在日志中看到 request_timed_out 错误。

看到你的代码后,我想给你一些建议,希望对你有用。

所以在express-session 中,您做了一些已弃用的事情,您也一定会看到以下警告。

express-session deprecated undefined resave option; provide resave option app.js:49:9
express-session deprecated undefined saveUninitialized option; provide saveUninitialized option app.js:49:9

因此,在您的 index.js 行号 48 中,除了秘密之外,您还必须添加 resave: falsesaveUninitialized: false

如下图:

app.use(expressSession({
    secret: 'secret',
    resave: false,
    saveUninitialized: false,
    store: new mongoStore({
        mongooseConnection: mongoose.connection
    })
}))

【讨论】:

  • 它对你有用吗?我的意思是我仍然遇到同样的错误。我之前也配置过!
  • @HemantaJungXetry 是的,它确实有效。 limitless-coast-67340.herokuapp.com 这是部署。好的,您可以尝试另一个命令:heroku addons:add mongolab
  • man 它的工作.. 你刚刚配置了 mongoDB url 对吗?我在哪里失踪!我会清理我的想法,稍后再检查。无论如何,非常感谢你的帮助!不过真的很有帮助! @Ashutosh,这个heroku插件的anf:添加mongolab我的卡不被接受。
  • @HemantaJungXetry,我很高兴能提供帮助,这就是这个社区的目的。是的,我所做的只是配置 URL,(如果你坚持这个领域,Heroku 是你将要使用很长时间的东西)所以如果你想添加账单,在 Kotak 811 Online 中创建一个帐户,你可以在该银行启用您的卡进行国际支付,因此它将起作用。再次很高兴为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 2020-01-26
  • 2015-01-06
  • 2017-07-24
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多