我想根据路线更改静态路径。例如(不工作):
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');
这可能吗?
答案 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...
}