我想根据特定的Cookie提供静态文件。
让我们说Cookie 语言的值是“ en”,我想投放dist / browser / en。
类似这样的事情:
app.use(express.static(path.join(__dirname, '../../client/dist/browser/',req.cookies.language), { maxAge: '2d'}));
我知道这是行不通的,因为我无法在此处访问请求,但是高度赞赏如何实现此要求。
答案 0 :(得分:1)
您不能以“动态”方式使用express.static()
来根据请求中的信息确定其作用。之所以称为express.static()
,是因为路由是静态的,并且对每个人都执行相同的操作。
要动态提供数据,您将必须编写自己的路由,该路由检查cookie,然后找到适当的文件并将该文件作为响应流送回。 express-static
基于serve-static
模块,您可以检查源代码here。这不是很复杂。
答案 1 :(得分:0)
借助jfriend00´s Answer的帮助,我可以编写符合我想要的代码:
app.use("*",function(req,res,next){
const parts = req.originalUrl.split( "."); //sepaprate the url to finmd out if file is requested
if(parts.length >= 2 && //if there is a file ending
req.originalUrl.length - req.originalUrl.lastIndexOf(".") <= 4){ //check if its really a file
let language = req.cookies?req.cookies.language:null;
if(!language){ // set standard language
language = "de";
}
res.sendFile(path.join(__dirname, '../../client/dist/locales/',language,req.originalUrl), { maxAge: '2d'}); // send file
}else{
//otherwise let someone else handle the request
next();
}
});