通过 Express 中间件从 google-cloud-storage 提供静态文件

Jea*_*ant 4 google-app-engine node.js express google-cloud-storage

我有一个在谷歌上托管的 Express 应用程序AppEngine,它使用 Express 静态中间件。我想将静态文件存储在 上google-cloud-storage,并且能够从常规文件系统切换到google-cloud-storage无需太多修改。

我正在考虑编写一个中间件:

有没有更简单/更干净的方法来做到这一点?

use*_*439 5

我使用 http-proxy-middleware 完成了这项工作。本质上,由于 GCS 文件可以通过 http 协议访问,这就是我们所需要的。

理想情况下,文件可以直接从 GCS 本身提供服务,方法是将存储桶公开并使其 URL 类似于https://storage.googleapis.com/<bucket-name>/file. 但我的要求是需要从与我的应用程序相同的域提供文件,但这些文件不是应用程序本身的一部分(它们是单独生成的)。因此,我必须将其实现为代理。

import proxy from 'http-proxy-middleware';
...

app.use('/public', proxy({
  target: `https://storage.googleapis.com/${process.env.GOOGLE_CLOUD_PROJECT}.appspot.com`,
  changeOrigin: true,
}));
Run Code Online (Sandbox Code Playgroud)

请注意,基于项目 ID 的存储桶是由 GAE 自动创建的,但需要授予公共访问权限。这可以通过以下方式完成

gsutil defacl set public-read gs://${GOOGLE_CLOUD_PROJECT}.appspot.com
Run Code Online (Sandbox Code Playgroud)

设置代理后,所有对https://example.com/public/ * 的请求都将从存储桶中提供<GOOGLE_CLOUD_PROJECT>.appspot.com/public/*