【问题标题】:Serve html file with NodeJS and serve-static使用 NodeJS 和 serve-static 提供 html 文件
【发布时间】:2016-04-05 08:29:16
【问题描述】:

我正在 Google App Engine 柔性环境(托管 VM)上使用 Node JS 开发 Express Web 应用程序。基本上我只有一个需要服务的静态 HTML 页面,因为所有内容都是在 Angular JS 中动态加载的。

在阅读 Express best practices 时,我注意到他们不鼓励使用 res.sendFile,这正是我在开发中一直在做的事情。

由于我要切换到生产,我想按照建议使用静态服务,但我找不到任何说明如何模拟 res.sendFile 的文档。

您可以在下面找到我当前的代码。

var app = express();
app.use(express.static('www'));
app.get('/', oauth2.required, function (req, res) {
// ...
res.sendFile(path.join(__dirname + '/www/dashboard.html'));
// ...
});

【问题讨论】:

  • 在生产中,您可以使用 nginx 服务器为您提供静态文件,并让您的 node.js 服务器处理动态内容。它通常是减少 node.js 服务器上的请求的最优化解决方案,例如服务器静态文件比 nginx 慢。
  • 问题是我在 App Engine Flexible 上运行,我不知道我是否可以访问 nginx 配置。
  • 从未使用过,但似乎可以在快速 google 搜索后,似乎可以安装自己的 nginx cloud.google.com/appengine/docs/flexible Infrastructure Customization 和 cloud.google.com/solutions/https-load-balancing-nginx 但用于提供静态文件的默认 express 中间件也可以解决问题 app.use('/public', express.static(path.join(__dirname, './public')));

标签: node.js google-app-engine express


【解决方案1】:

要提供静态文件,您可以在 expressJS 中定义静态文件夹内容

app.use('/public', express.static(path.join(__dirname, './public')));

这意味着当您点击 mydomain.com/public/image.png 之类的 URL 时,您的公共文件夹中的每个文件都将作为静态内容提供

编辑:如果可能的话,在您的开发环境中

您可以使用 nginx 服务器为您提供静态文件,并让您的 node.js 服务器处理动态内容。它通常是减少 node.js 服务器上的请求的最优化解决方案,例如,服务器静态文件的速度比 nginx 慢。

一个 nginx 配置可以是

   root /home/myapp;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location /public/ {
            alias /home/myapp/public/;
    }

    location / {
            proxy_pass http://IPADRESSOFNODEJSSERVER:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            #try_files $uri $uri/ =404;
    }

在 URL 的第一部分带有 /public/ 的每个请求都将由 nginx 处理,并且所有其他请求都将通过您的 IPADRESSOFNODEJSSERVER:NODEJSPORT 代理给您的 nodejs 应用程序,通常 IPADRESSOFNODEJSSERVER 是本地主机

使用 NGNIX 的第二个选项是指文档部分

更好的选择是使用反向代理来提供静态服务 文件;有关详细信息,请参阅使用反向代理。

http://expressjs.com/en/advanced/best-practice-performance.html#proxy

【讨论】:

  • 我知道 express.static 函数,但我不知道如何用“static-serve”包中的适当函数替换 res.sendFile。
  • 这是正确答案,您应该将 Angular 应用程序放入一个文件夹,然后使用 express 静态服务该文件夹。这样 Angular 在前面做它的事情并且 express 可以处理 api 调用、持久登录等。这就是我构建我的应用程序的方式MEANBoilerPlate
猜你喜欢
  • 2014-11-20
  • 2021-07-29
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 2018-03-10
相关资源
最近更新 更多