我使用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")));
有没有办法解决这种情况?