当前位置: 首页 > 面试题库 >

带有NodeJS的Google App Engine 502(错误网关)

许展鹏
2023-03-14
问题内容

我有一个使用NodeJS,MongoDB(以Mongoose作为驱动程序)和ExpressJS的完整Web应用程序。

该项目可以在我的本地计算机上完美运行。今天,我决定将一切都投入生产。我正在使用Google App
Engine托管我的应用程序,并使用Compose(以前是MongoHQ)托管我的数据库。

尽管我的API似乎不起作用,但App
Engine可以完美地为我的应用程序提供服务器。我的API是从服务example.com/api,并且每个请求(GETPOSTDELETEPUT)所有返回一个502(坏网关)错误。

我尝试在连接到远程MongoDB数据库的同时在本地html" target="_blank">计算机上运行应用程序,并且运行良好。因此,App
Engine或NodeJS一定是问题,而不是MongoDB。

我尝试检查Google Cloud中的所有错误日志,尽管没有错误。

为什么App Engine / NodeJS可以很好地为我的应用程序提供静态内容,但不允许对我的API发出任何请求?


问题答案:

502 Bad Gateway通常是Nginx方面的错误。不幸的是,这些日志尚未浮出水面。

很多时候,问题在于您的HTTP数据包太大,无法容纳缓冲区或类似内容。您看到nginx日志的方式是这样的:

  • 仅使用1个VM。这不是严格必要的,但是很多时候,如果您知道自己在一台计算机上的请求,则可以更轻松地调试应用程序。您可以通过将其添加到您的app.yaml中来完成此操作:

manual_scaling: instances: 1 然后重新部署

  • 将虚拟机从“ Google拥有”切换到自我管理。这可以在Cloud Console中完成。转到Compute Engine实例,单击与App Engine版本匹配的实例名称,您应该会看到一个选项,可将其切换为自我管理。

  • gcloud compute ssh <instance name> SSH到机器

  • docker ps查看您正在运行的容器。查找名为nginx的容器并获取其ID。

  • 有了容器ID后,您应该可以docker exec -it <container id> -- cat /var/log/nginx/error.log。您可能需要ls整个日志目录。

您可能会看到一个错误,这将对发生的问题有更大的提示。

我知道这比应该的要复杂得多:-\如果您对上述步骤有任何疑问,请发表评论。如果您确实发现了错误,但不确定如何处理,请发表评论。



 类似资料:
  • 我有一个使用NodeJS、MongoDB(Mongoose作为驱动程序)和ExpressJS的完整web应用程序。 这个项目在我的本地机器上运行得很好。今天我决定把一切都转移到生产上。我正在使用Google App Engine来托管我的应用程序,并使用Compose(形式上是MongoHQ)来托管我的数据库。 App Engine完美地服务于我的应用程序,尽管我的API似乎不起作用。我的API由

  • 问题内容: 更新-自行回答 我看到必须确保从计算机正确解析了DNS,请查看节点文档以确保域是可解析的。 原始问题 我正在编写一个基于节点的程序,用户可以要求我代表他们执行一次httprequest {当然,他们向我提供一些数据和调用方法},但是每次我执行一次httprequest,都会给我一个错误 getaddrinfo ENOENT这是我的代码的外观 问题答案: 我已经看到,当您的主机(您通过h

  • 我使用下面的代码来解析重定向以返回链接的最终url 不幸的是,我有时会得到 .解决这个问题的好方法是什么?以下是好的还是有更好的方法。 另外,如果except块中有异常,会发生什么情况?

  • 有人能帮我做这个吗? 我不知道错误是什么,也不知道我应该如何修复它。任何帮助都很感激

  • 问题内容: 我试图使用下面的代码获取MSSQL nodejs包以从Microsoft SQL Server返回存储过程的结果。但是我得到的错误是… 我不确定我是否正确地完成了输入,因为我找不到在线上有多个输入的示例。 有任何想法吗? 我使用软件包“ Seriate”成功完成了请求,但希望使用mssql。适用于“ Seriate”的代码如下。 问题答案: 我认为线的 这有req.input那似乎是错

  • 问题内容: 我正在尝试在NodeJS中使用async / await,但是我的脚本抛出了语法错误。 自从Node 7.6以来,我一直很自然地支持 async / await 。当我跑步时我得到。 以下是内容: 但是,当我调用此脚本时,我得到: 我正在运行Linux Mint 18.1。 如何获得我的脚本进行编译和运行? 问题答案: 仅在内部函数中有效,因此,例如,您需要一个异步IIFE将代码包装为