由Google App Engine提供的Node.js +静态内容

时间:2015-10-23 10:36:59

标签: node.js google-app-engine google-cloud-platform httpserver app.yaml

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

1 个答案:

答案 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文件的最后,以避免出现问题。