Node.js 动态设置express.static目录
我想设置exress.static的根目录,使来自子域的请求具有单独的根文件夹 我有一个有多个子域名的网站,其结构如下Node.js 动态设置express.static目录,node.js,express,Node.js,Express,我想设置exress.static的根目录,使来自子域的请求具有单独的根文件夹 我有一个有多个子域名的网站,其结构如下 index.js public/ -- site1 -- site2 -- site3 当请求来自site1.mydomain.com且site2.mydomain.com无法从public/site1目录获取文件时,我想将public/site1设置为静态文件夹 我试过这个: app.use ((req, res, next) => { let hostName
index.js
public/
-- site1
-- site2
-- site3
当请求来自site1.mydomain.com
且site2.mydomain.com
无法从public/site1
目录获取文件时,我想将public/site1
设置为静态文件夹
我试过这个:
app.use ((req, res, next) => {
let hostName = req.headers.host;
let options = domainMap[hostName];
req.app.use (
express.static (path.join (__dirname, 'public', options.publicDir))
);
next ();
});
domainMap包含以下对象:
{
site1:{
publicDir:'site1',
},
site2:{
publicDir:'site2',
},
site3:{
publicDir:'site3',
}
}
现在它只为第一个请求设置公共目录,但是有没有办法为每个请求动态更改i?您可以动态生成所需的中间件函数,然后手动调用它。您不想将其注册到
app.use()
,因为这样它将对所有请求都处于活动状态。这就是为什么需要手动调用它。另外,express.static()
生成一个已经调用next()
的中间件,因此除了不调用生成的中间件外,您也不需要这样做
app.use ((req, res, next) => {
let hostName = req.headers.host;
let options = domainMap[hostName];
// protect against missing or unexpected hostName
if (options && options.publicDir) {
let middleware = express.static(path.join (__dirname, 'public', options.publicDir));
middleware(req, res, next);
} else {
// nothing to do here, keep routing
next();
}
});
这解决了这个问题,但我最终以一种符合我需求的方式重写了express的服务静态模块。谢谢你的聪明解决方案