给定目录路径中的每个目录调用express.static

时间:2019-10-02 09:35:41

标签: javascript express

我喜欢创建一个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}`)));
});

但我希望有人会提供更好的解决方案:)

0 个答案:

没有答案