首页 > 解决方案 > 如何在 AppEngine Standard 和 nodejs 中提供静态文件

问题描述

文档说您只需更新您的 app.yaml - 就像您在 AppEngine 中的任何语言一样。它稍后还指出,对于本地开发,您可能希望您的服务器也响应静态请求。但是,当我将非常简单的 app.yaml 更新为这样时:

runtime: nodejs8

handlers:
  - url: /apiEndPoint
    script: auto

  - url: /.*
    static_dir: public

似乎所有请求最终仍会进入我的脚本 - 这将在 prod 实例中返回 404,因为这些文件不会被上传。我可以强制它们上传,然后我的 nodejs 服务器响应静态请求 - 但我认为这个 app.yaml 的想法是配置它,以便在我的应用程序逻辑之外提供静态文件?

标签: node.jsgoogle-app-engineserverstaticapp.yaml

解决方案


所以要清楚 -可以在生产 Nodejs Standard AppEngine 中托管静态文件,而无需使用 JS 服务器。但是,对于本地开发,您必须找到一种在您的机器上运行时在本地提供这些文件的方法。出于这个原因,您将处理程序放在 Express 中,用于静态文件,在生产中永远不应该触及它们 - 因为 app.yaml 处理程序是第一次通过。

如果你想肯定 Express.js 没有在生产环境中提供静态文件,你可以这样做:

// Production instances automatically have this environment variable.
const isLocal = (process.env.NODE_ENV !== "production");

if(isLocal) {
  app.use(express.static('public'));
}

推荐阅读