Express:根据Cookie提供静态文件

时间:2018-08-06 17:28:42

标签: node.js express

我想根据特定的Cookie提供静态文件。

让我们说Cookie 语言的值是“ en”,我想投放dist / browser / en。

类似这样的事情:

app.use(express.static(path.join(__dirname, '../../client/dist/browser/',req.cookies.language), { maxAge: '2d'}));

我知道这是行不通的,因为我无法在此处访问请求,但是高度赞赏如何实现此要求。

2 个答案:

答案 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();
    }
});