如何根据路径更改快速静态路径?

时间:2017-05-24 03:09:57

标签: javascript node.js express

我想根据路线更改静态路径。例如(不工作):

const app = express();
const appRouter = express.Router();
const adminRouter = express.Router();

appRouter.use(express.static('/path/to/app/static/assets');
adminRouter.use(express.static('/path/to/admin/static/assets');

app.use('/', appRouter);
app.use('/admin', adminRouter);

这也不起作用:

const app = express();

app.use('/', express.static('/path/to/app/static/assets');
app.use('/admin', express.static('/path/to/admin/static/assets');

想要做的是将两个路径设置为整个应用的静态路径:

// the following will expose both paths as static for the entire app
// this does not accomplish what I am trying to do

const app = express();

app.use(express.static('/path/to/app/static/assets');
app.use(express.static('/path/to/admin/static/assets');

这可能吗?

3 个答案:

答案 0 :(得分:1)

我认为使用Express静态中间件是不可能的。

答案 1 :(得分:1)

使用express.static()的方法无法实现您想要实现的目标。对于由express.static函数提供服务的文件,您的#2方法会创建虚拟路径前缀(文件系统中实际不存在路径)。关注this以获取更多信息。

但似乎可以做的是在运行时更改express.static()的路径。请按照this git issue进行操作。希望它有所帮助。

答案 2 :(得分:0)

我能够在Tolsee发布的git问题后找到解决方案。我以express-dynamic-static名称published it到npm。

以下是如何使用它的简单示例:

const express = require('express');
const dynamicStatic = require('express-dynamic-static')(); // immediate initialization
const path = require('path');

const app = express();
app.use(dynamicStatic);

app.get('/', (req, res) => {
    dynamicStatic.setPath(path.resolve(__dirname, 'path/to/app/assets'));

    // res.render...
}


app.get('/admin', (req, res) => {
    dynamicStatic.setPath(path.resolve(__dirname, 'path/to/admin/assets'));

    // res.render...
}