我喜欢创建一个Express应用程序,该应用程序可以提供多个Vue.js应用程序(生产文件),但是由于我只需要处理html,js和css文件,因此它可能也是另一种技术。
我目前具有此目录结构
.
|
├── Express App / Fileserver
│ └── app.js
|
├── base
| ├── index.html
| └── js
| └── jsFile.js
│
└── apps
├── appOne
| ├── index.html
| └── js
| └── jsFile.js
└── appTwo
├── index.html
└── js
└── jsFile.js
我在一个单独的目录中有一个基本应用程序,在apps目录中有多个应用程序。为了提供这些应用程序,我尝试进入Express文件服务
const express = require('express');
const path = require('path');
const app = express();
const router = express.Router();
app.use(express.static(path.resolve(__dirname, '../base')));
app.use(express.static(path.resolve(__dirname, '../apps')));
router.get('/', function(req, res) {
res.sendFile(path.resolve(__dirname, '../base/index.html'));
});
router.get('/apps/:appName', function(req, res) {
res.sendFile(
path.resolve(__dirname, `../apps/${req.params.appName}/index.html`)
);
});
app.use('/', router);
app.listen(3000, function() {
console.log('Fileserver listening on port 3000');
});
当我致电http://localhost:3000/
时,基本应用程序将得到正确的服务。
调用http://localhost:3000/apps/appOne/
时未找到AppOne的.js文件。
为解决这个问题,我也可以使该应用程序目录也为静态app.use(express.static(path.resolve(__dirname, '../apps/appOne')));
,但我正在寻找一种更动态的方法。
是否可以将apps目录中的每个app目录设为静态?还是我必须遍历apps目录并为找到的每个路径调用express.static
函数?
我已经尝试通过将express.static
调用更改为一次调用来使所有操作一次保持静态
app.use(express.static(path.resolve(__dirname, '../')));
但是我的基本应用程序也崩溃了。看来我必须指定要提供的每个应用程序。顺便说一下,生成的Vue发行版已经在其index.html文件中使用了绝对路径。
我当前针对每个应用程序的解决方法:
fs.readdirSync(path.resolve(__dirname, '../apps')).forEach(appName => {
app.use(express.static(path.resolve(__dirname, `../apps/${appName}`)));
});
但我希望有人会提供更好的解决方案:)