Google App Engine提供的Node.js +静态内容
Google云文档对于用于我的Node.js应用程序的app.yaml文件的可用语法不太精确。
我使用了GAE的Python文档中描述的语法,从中我find了处理器的机制:
handlers: - url: /index.html static_files: /public/index.html upload: /public/index.html
我已经避免了我的expressjs规则来服务/public/index.html内容,最后我得到了一个404错误,这意味着GAE没有为我的页面提供静态内容:
$ curl -i "http://my-project/index.html" HTTP/1.1 404 Not Found ...
你有什么线索吗? Node.js与制作API,生成dynamic内容有关…但我更喜欢使用Google后端甚至是Nginx服务器来处理静态内容。
更新
删除引导斜线并没有解决这个问题。 我稍微改变了我的app.yamlconfiguration:
handlers: - url: /api/.* secure: always script: app.js - url: /.* secure: always static_dir: public
我仍然在/index.html
上find404 ,在调用/api/stuff
时得到正确的200 OK 。
这是我的项目树结构:
Project root |- app.js |- app.yaml |- package.json |- public/ | `-- css/ | `-- style.css | `-- js/ | `-- main.js | `-- index.html
在非常文档页面的例子通常应该足够了。
你有一个领先的/
在static_files
和upload
值,这应该只是相对path到您的应用程序目录的顶部。
可能还有其他原因,起点将是您的应用程序的日志,无论是在您的开发服务器上,还是在已部署的GAE上。
更新:
根据静态目录处理程序文档 :
一个静态目录的例子:
handlers: # All URLs beginning with /stylesheets are treated as paths to static files in # the stylesheets/ directory. - url: /stylesheets static_dir: stylesheets
url
一个URL前缀。 该值使用正则expression式语法(因此必须转义正则expression式特殊字符),但不应包含分组。 以此前缀开头的所有URL均由此处理程序处理,并将前缀之后的部分URL用作文件path的一部分。
基于这个引用,我怀疑app.yaml
处理程序规范的url
中的通配符可能会导致问题(例如/index.html
可能实际上被static_dir
parsing逻辑扩展为/index.html/
) ,我会更换url,以清楚地指出一个目录,如下所示:
- url: / secure: always static_dir: public
我不喜欢把应用程序名称空间的最高级别绑定到静态目录,但对于一般的静态应用程序来说,这可能是正常的。 确保您始终将这个处理程序规范保留在您的app.yaml
文件中以避免问题。
- 错误:(gcloud.preview.app.deploy)
- 如何从谷歌数据存储中的祖先查询返回的对象检索完整的密钥?
- 使用Nodejs Google App Engine灵活的生产环境是否好?
- ApiError:禁止从本地Node.js应用程序访问App Engine数据存储
- Google云应用引擎重启function无法正常工作
- Google App Engine nodejs网站错误503
- 如何对Google Datastore中的很多实体进行总计?
- gcloud节点数据存储 – 如何在单个事务中过滤多个实体密钥?
- 如何使用Google App Engine实例处理Google Cloud Load Balancer中的502s?