在Google App Engine中处理/ _ah / start路由NodeJ

nikhil024

我正在为NodeJs应用程序使用Google App Engine标准环境。一切正常,直到我在Express应用程序中注册了路由“ / *”以捕获初始路由(例如“ /”,“ / login”等)之后的所有路由。在GAE上部署我的应用程序后,我得到了:

Error: Server Error
The server encountered an error and could not complete your request.
Please try again in 30 seconds.

在我的App Engine构建日志中:

在此处输入图片说明我的app.yaml看起来像:app.yaml

runtime: nodejs10
env: standard
service: default
health_check:
  enable_health_check: False
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

引用GAE的官方文档:https//cloud.google.com/appengine/docs/standard/nodejs/how-instances-are-managed

启动每个服务实例都是为响应启动请求而创建的,该启动请求是对/ _ah / start的空HTTP GET请求。App Engine发送此请求以使实例存在。用户无法将请求发送到/ _ah / start。手动和基本伸缩实例必须先响应启动请求,然后才能处理其他请求。启动请求可以用于两个目的:

在不接受进一步请求的情况下启动无限期运行的程序。在实例收到其他流量之前对其进行初始化。手动,基本和自动扩展实例的启动方式有所不同。启动手动扩展实例时,App Engine会立即向每个实例发送一个/ _ah / start请求。启动基本扩展服务的实例时,App Engine允许它接受流量,但是/ _ah / start请求不会发送到实例,直到它收到其第一个用户请求。为了处理增加的流量,仅在必要时启动多个基本伸缩实例。自动缩放实例不会收到任何/ _ah / start请求。

当实例使用200–299或404的HTTP状态代码响应/ _ah / start请求时,它被视为已成功启动并可以处理其他请求。否则,App Engine将终止实例。手动伸缩实例将立即重新启动,而基本伸缩实例仅在需要服务流量时才重新启动。

我想念什么吗?请帮忙。

提前致谢

nikhil024

我通过注册我的最后一条路线来解决此问题:

app.get(/^(?!.*_ah).*$/,(req,res,next)=>{
})

与我之前的配置相比

app.get('/*',(req,res,next)=>{
    })

在这里,我使用了否定正则表达式相信这个答案

引用GAE官方文档

在实例收到其他流量之前对其进行初始化。手动,基本和自动扩展实例的启动方式有所不同。启动手动扩展实例时,App Engine会立即向每个实例发送一个/ _ah / start请求。

上面的路由处理程序所做的是捕获除以开头的_ah那条路由以外的所有路由,这意味着_ah / start和_ah / stop将不会被我的应用程序监听,因为它们被Google App引擎用于注册该应用程序。

我希望这对以后的人有所帮助。

谢谢

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章