我正在尝试部署一个简单的node js应用程序(通过Google Cloud应用程序引擎)使用静态HTML前端,找到了here。它在本地工作正常,以前我能够部署后端API和前端,而不会对appengine造成问题。然而,由于尝试成功部署两者,(和相关的修补),我现在有错误的前端(404)和后端(500)。我已经通过日志,并花了12个多小时试图弄清楚这一点(包括仔细研究日志)。我意识到有类似的问题,但是在花了几个小时回顾它们之后,我不知所措,夹着尾巴来到小组寻求帮助。我相信我已经将问题缩小到app.yaml和package.json中的一些东西。如果当前版本的app.yaml(粘贴在下面)是一个烂摊子,我已经尝试了这个文件的一切尝试和解决.似乎是围绕URL处理程序,但我真的很茫然.在我之前可以成功地有前端或后端运行,现在我不确定是什么问题. app.yaml:
runtime: nodejs20
env: standard
instance_class: F1
handlers:
- url: /api/quotes
script: auto
- url: /(.*)
static_files: public/\1
upload: public/.*
- url: /(.*\.js)
static_files: ../public/\1
upload: /public/(.*\.js)
- url: /(.*\.css)
static_files: /public/\1
upload: /public/(.*\.css)
- url: /.*
script: auto
- url: .*
script: auto
env_variables:
MONGODB_URI: >-
mongodb+srv://user:[email protected]/?retryWrites=true&w=majority
automatic_scaling:
min_idle_instances: automatic
max_idle_instances: automatic
min_pending_latency: automatic
max_pending_latency: automatic
service_account: [email protected]
字符串
注意在上面我已经替换了mongodb密码出于安全原因,但实际的文件有它,工作正常。
下面是日志中错误的textPayload字段
from Error: Cannot find module '/workspace/server.js'
at Module._resolveFilename (node:internal/modules/cjs/loader:1048:15)
at Module._load (node:internal/modules/cjs/loader:901:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:83:12)
at node:internal/main/run_main_module:23:47 {
型
我知道这是一个简单的新手错误,但任何帮助将不胜感激,因为我已经用尽了我能想到的每一个选项。谢谢!
**编辑:**我能够修复后端和API/报价路由返回数据的预期现在!然而,我仍然得到一个404前端(/),但我仍然困惑如何修改应用程序.yaml文件来修复(假设问题在这里)。
前端404的最新日志:
logMessage:“未找到处理程序引用的静态文件:public/”
浏览器中的前端错误(控制台也返回404):
错误代码:Not Found The requested URL / was not found on this server.基于日志和我在浏览器中看到的,我需要更改主页的app.yaml中的URL处理程序,但我仍然有点不确定upload和static_files字段的工作方式。显然,为“/”路由设置的处理程序关闭了,但我一直在尝试修改。
1条答案
按热度按时间aiazj4mn1#
1.当你定义URL处理器时,你应该从最受限制的模式开始,然后向下到限制较少的模式。从你现在的
app.yaml
,- url: /(.*)
将匹配所有文件,包括以.js
或.css
结尾的文件,这意味着您创建的其他处理程序(例如/(.*\.js)
和/(.*\.css)
)不会被触发。两个位于- url: /(.*)
处理程序之上1.根据您的描述,这是否意味着您正在部署2个不同的服务?如果是这样,这意味着您需要2个不同的
app.yaml
,在这种情况下,您的问题中有哪一个?您有../public/\1
和public/\1
。您有2个公用文件夹吗?还是您正在从应用程序的不同级别访问公用文件夹?