代码之家  ›  专栏  ›  技术社区  ›  Joniras

Express:根据cookie提供依赖于静态文件的服务

  •  0
  • Joniras  · 技术社区  · 6 年前

    我想提供依赖于特定cookie的静态文件。

    比如说饼干 语言 值为'en',我想提供dist/browser/en服务。

    像这样的:

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

    我知道这是行不通的bc我在这里没有访问需求,但提示如何实现这是高度赞赏。

    2 回复  |  直到 6 年前
        1
  •  1
  •   jfriend00    6 年前

    你不能用 express.static() 以一种“动态”的方式,根据请求中的信息来决定它做什么。它叫 express.static() 因为一个原因,路线是静态的,对每个人都做同样的事情。

    要动态地提供数据,您必须编写自己的路由来检查cookie,然后找到相应的文件并将该文件作为响应流返回。 express-static 基于 serve-static 模块,您可以检查源代码 here . 不是很复杂。

        2
  •  0
  •   Joniras    6 年前

    多亏了 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();
        }
    });