【问题标题】:Heroku Error Code H12 problem with Node.JS, backend with MongoDB atlasNode.JS 的 Heroku 错误代码 H12 问题,MongoDB 地图集的后端
【发布时间】:2020-01-03 22:06:19
【问题描述】:

问题:

检查 Heroku 日志时出现此错误:

code=H12 desc="请求超时" method=POST path="/delete" host=dry-falls-65221.herokuapp.com request_id=0d934a3c-84ea-4e7d-aa53-f437830b807e fwd="136.36 .41.157" dyno=web.1 connect=0ms service=30001ms status=503 bytes=0 protocol=https。

我做了什么:

我检查了文档并安装了整个东西。检查应用程序here。但是,每次我尝试从列表中删除一个项目时,应用程序都会崩溃并出现 H12 错误。 我检查了 Mongo DB Atlas 中的数据库,该项目被删除,所以它的页面没有正确重定向。您可以看到,当您手动重新加载页面时,它会相应地呈现。我该如何解决这个问题?

使用 NodeJS 的代码部分,还有 Express、body-parser、mongoose、lodash:

app.post("/delete", function(req, res) {
  const checkedItemId = req.body.checkbox;
  const listName = req.body.listName;
if (listName === "Today") {

  Item.findByIdAndRemove(checkedItemId, function(err) {
    if (err) {
      console.log(err);
    } else {
      console.log("Deleted!");
    }
  });
} else {

List.findOneAndUpdate({name:listName},{ $pull: {items: {_id: checkedItemId}}}, function (err, foundList) {

  if(!err) {

    res.redirect("/" + listName);
  }
});

}

});

我还附上了 HTML 部分(使用了 EJS)

  <% newListItems.forEach(function(item) { %>
<form class="item" action="/delete" method="post">
  <div class="item">
    <input  name="checkbox" value="<%=item._id%>" type="checkbox" onChange="this.form.submit()">
    <p><%=  item.name  %></p>
  </div>
  <input type="hidden" name="listName" value="<%= listTitle %>">
</form>

任何帮助将不胜感激。

【问题讨论】:

    标签: node.js mongodb heroku


    【解决方案1】:

    我有类似的错误。
    我找到了一个链接https://dev.to/cpclark360/how-to-host-a-restful-node-js-server-with-mongodb-atlas-database-on-heroku-1opl。 参考这个链接,它有完整的mongodb atlas和node js的设置过程。
    很可能您忘记在 heroku 中设置环境变量。
    希望这会有所帮助:)

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    【解决方案2】:

    您遇到此错误的原因可能是因为数据库不允许您进行任何更改。我建议使用以下方法来捕获错误:

    1. 检查日志
    heroku logs --tail
    

    为每次使用 api 端点的尝试寻找一个 IP 地址。

    例如

    我试图提高 IP 地址,但没有显示。查找 fwd="102.65.57.87" 作为示例,然后将其添加到网络访问部分中允许的 IP。

    如果允许 IP 不起作用,试试这个:

    try {
      mongoose.connect(db, {
        useUnifiedTopology: true,
        useNewUrlParser: true
      });
      console.log('MongoDB is Connected...');
    } catch (err) {
      console.error(err);
      process.exit(1);
    }
    

    如果您的数据库出现错误,您将获得上述代码的信息,您可以更好地进行故障排除。

    编码愉快!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-10
      • 2012-06-14
      • 2020-07-09
      • 2017-01-18
      • 1970-01-01
      • 2021-02-26
      • 2012-07-08
      • 2018-06-25
      相关资源
      最近更新 更多