使用NodeJS和serve-static服务html文件

时间:2016-04-05 08:29:17

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

我正在Google App Engine灵活环境(托管虚拟机)上使用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'));
// ...
});

1 个答案:

答案 0 :(得分:1)

要提供静态文件,您可以在expressJS

中定义静态文件夹内容
app.use('/public', express.static(path.join(__dirname, './public')));

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

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

您可以使用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;
    }

每个使用/ public /在url的第一部分的请求都将由nginx处理,并且每个其他请求都将代理到您IPADRESSOFNODEJSSERVER:NODEJSPORT上的nodejs应用程序,通常IPADRESSOFNODEJSSERVER是localhost < / p>

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

  

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

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