вызовите express.static для каждого каталога в заданном пути к каталогу - PullRequest
1 голос
/ 02 октября 2019

Мне нравится создавать приложение 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}`)));
});

Но я надеюсь, что кто-то предоставит лучшее решение:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...