nik*_*024 3 google-app-engine node.js express
我正在为我的 NodeJs 应用程序使用Google App Engine标准环境。一切正常,直到我在我的快递应用程序中注册了一条路线 '/*' 以捕获我的初始路线(如 '/'、'/login' 等)之后的所有路线。在 GAE 上部署我的应用程序后,我得到:
Error: Server Error
The server encountered an error and could not complete your request.
Please try again in 30 seconds.
Run Code Online (Sandbox Code Playgroud)
在我的 App Engine 构建日志中:
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
Run Code Online (Sandbox Code Playgroud)
引自 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 请求。
当实例响应 /_ah/start 请求时,HTTP 状态码为 200-299 或 404,则认为它已成功启动并可以处理其他请求。否则,App Engine 将终止该实例。手动伸缩实例会立即重启,而基本伸缩实例仅在需要服务流量时才会重启。
我错过了什么吗?请帮忙。
提前致谢
我通过将我的最后一条路线注册为这样解决了这个问题:
app.get(/^(?!.*_ah).*$/,(req,res,next)=>{
})
Run Code Online (Sandbox Code Playgroud)
与我之前的配置相比。
app.get('/*',(req,res,next)=>{
})
Run Code Online (Sandbox Code Playgroud)
在这里我使用了negate regex。归功于此 SO 答案
在实例接收额外流量之前初始化实例。手动、基本和自动扩展实例的启动方式不同。当您启动手动扩展实例时,App Engine 会立即向每个实例发送 /_ah/start 请求。
上面的路由处理程序所做的是捕获_ah除以 _ah/start 和 _ah/stop开头的路由之外的所有路由,因为我的应用程序不会侦听它们,因为 Google App 引擎使用它们来注册应用程序。
我希望这对未来的人有所帮助。
谢谢
| 归档时间: |
|
| 查看次数: |
2292 次 |
| 最近记录: |