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_filesupload值,这应该只是相对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_dirparsing逻辑扩展为/index.html/ ) ,我会更换url,以清楚地指出一个目录,如下所示:

 - url: / secure: always static_dir: public 

我不喜欢把应用程序名称空间的最高级别绑定到静态目录,但对于一般的静态应用程序来说,这可能是正常的。 确保您始终将这个处理程序规范保留在您的app.yaml文件中以避免问题。