Google Cloud文档对于用于 Node.js 应用程序的 app.yaml 文件的可用语法并不十分精确。
我使用了Python documentation for GAE中描述的语法,我从中找到了处理程序 mecanism:
handlers:
- url: /index.html
static_files: /public/index.html
upload: /public/index.html
我已经避免了我的expressjs规则来提供 /public/index.html 内容,最后我收到了404错误,这意味着GAE没有将我的页面作为静态内容提供:< / p>
$ curl -i "http://my-project/index.html"
HTTP/1.1 404 Not Found
...
你有什么线索吗? Node.js与制作API,生成动态内容相关......但我更喜欢使用Google后端甚至是Nginx服务器来处理静态内容。
删除前导斜杠并没有解决问题。我略微改变了我的 app.yaml 配置:
handlers:
- url: /api/.*
secure: always
script: app.js
- url: /.*
secure: always
static_dir: public
我仍然在/index.html
上找到 404 Not found ,然后获得
调用/api/stuff
时,正确的 200 OK 回答者。
这是我的项目树结构:
Project root
|- app.js
|- app.yaml
|- package.json
|- public/
| `-- css/
| `-- style.css
| `-- js/
| `-- main.js
| `-- index.html
答案 0 :(得分:1)
文档页面上的示例通常就足够了。
/
和static_files
值中有一个前导upload
,它应该只是应用程序目录顶部的相对路径。
也可能有其他原因,起点是您的应用程序的日志,无论是在开发服务器上,还是在已经部署的GAE上。
更新
根据Static directory handlers doc:
静态目录示例:
handlers: # All URLs beginning with /stylesheets are treated as paths to static files in # the stylesheets/ directory. - url: /stylesheets static_dir: stylesheets
URL
网址前缀。此值使用正则表达式语法(因此regexp 必须转义特殊字符),但不应包含 分组。所有以此前缀开头的URL都由此处理 处理程序,使用前缀后的URL部分作为一部分 文件路径。
基于此引用,我怀疑url
的处理程序规范app.yaml
中的通配符可能导致问题(例如/index.html
可能实际上被/index.html/
解析逻辑扩展到static_dir
,我将替换url以清楚地指示目录,如下所示:
- url: /
secure: always
static_dir: public
我不喜欢将应用程序名称空间的顶级/
绑定到静态目录,但对于一般的静态应用程序可能没问题。确保始终将此处理程序规范保留在app.yaml
文件的最后,以避免出现问题。