Мне нравится создавать приложение 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
У меня есть базовое приложение в отдельном каталоге и несколько приложений в каталоге приложений. Чтобы обслуживать эти приложения, я пытался получить доступ к файлам 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/
файлы .js для AppOne не были найдены.
Чтобы решить эту проблему, я могу также сделать этот каталог приложений статическим app.use(express.static(path.resolve(__dirname, '../apps/appOne')));
, но я ищу более динамичный способ.
Есть ли способ сделать каждый каталог приложений в каталоге приложений статическим? Или мне нужно перебирать каталог приложений и вызывать функцию 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}`)));
});
Но я надеюсь, что кто-то предоставит лучшее решение:)