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
文件中以避免问题。
- 在Google App Engine上禁用Node JS的默认域https:// .appspot.com
- Google AppEngine Node.js:部署API和WepApp
- 通过GAE托pipe的node.js express服务器上传大文件
- 在Google App Engine上部署socket.io
- 当使用'gcloud'模块时,NodeJs Google计算引擎无效ELF标头
- 我可以浏览node.js项目的本地Google Datastore模拟器数据吗?
- Google数据存储部分string匹配
- Google云端应用程序引擎上的节点应用程序在低于1024的端口上侦听
- 将Node App部署到GAE:找不到模块'v8-compile-cache'