如何使用Node.js提供静态文件?

时间:2019-05-28 13:08:15

标签: javascript node.js apache express virtualhost

我使用NodeJS开发了一个应用程序,但是在使用ExpressJS提供静态文件时遇到了问题。该问题仅发生在我的Ubuntu服务器上,原因是我使用Proxy将应用程序加载到wordpress网站中。这是我的Apache配置:

<VirtualHost *:80>
        ServerAdmin info@company.com
        ServerName mysite.com
        ServerAlias *.mysite.com
        DocumentRoot /var/www/html/mysite.com

        <Directory />
                Options -Indexes +FollowSymLinks
                AllowOverride None
                Require all granted
        </Directory>

        ProxyRequests Off
        ProxyVia Full
        <Proxy *>
                Require all granted
        </Proxy>

        <Location /mynodeapp>
                ProxyPass http://127.0.0.1:4568
                ProxyPassReverse http://127.0.0.1:4568
        </Location>

        Alias /js "/opt/mynodeapp/public/js"
        Alias /css "/opt/mynodeapp/public/css"
        Alias /fonts "/opt/mynodeapp/public/fonts"

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

基本上,当用户访问mysite.com时会看到wordpress站点,而当用户访问mysite.com/mynodeapp时便会看到nodejs应用程序。 使用Proxy,我可以在mysite.com下加载应用程序,但这导致ExpressJS出现问题。

我遇到的第一个问题是在加载js, css, fonts文件时,实际上我得到了404。 我使用Alias解决了该问题,特别是如果应用程序需要该文件夹时,Apache将在/opt/mynodeapp目录中查找,该目录是我的NodeJS应用程序的目录。

在使用Alias之前,Apache试图从mysite.com加载文件,但是此路径是错误的,因为其中包含wordpress网站而不是应用程序。

现在另一个问题是ExpressJS的请求,当我点击NodeJS应用中的按钮时,我得到了:

  

无法加载资源:服务器的响应状态为404(未找到)

例如:指向/elaborate的ajax请求:

router.post('/elaborate', calculatorController.calculateUsers);

这是ExpressJS静态文件配置器:

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

有没有办法解决这种情况?

0 个答案:

没有答案