2017-04-07 149 views
0

在Express中,您将设置一个静态文件夹,以便通过中间件为您的文件提供服务。从我所了解的情况来看,这是在整个应用程序生命周期中设置的。动态更改Express静态路径

是否可以在每个请求的server.js文件中设置某处?例如一些请求使用“clientNew”文件夹,而其他请求使用“client”。我希望能够通过session-id看到差异,而不是通过URL。

+0

为什么不使用CDN而不是表达静态?在CDN的情况下,您可以轻松地在每个请求级别更改文件夹名称 – vartika

+0

CDN不是此处的选项,我们正在处理多个客户机文件夹,并且它们将改变/增加很多用户的数量。我们需要的是一个自动解决方案,静态文件夹根据请求中的版本号(当前存储在cookie中)进行更改。如果不存在,我们只是默认提供服务。 – Undrium

回答

0

所以,虽然这不是一个推荐的方法,因为有缓存和响应时间优化的用户很多的“开放”应用程序,我通过指向静态处理程序来解决它。

exports.createDynamicPath = function(app, path) { 
    var static = app.loopback.static(path, { etag: false}); 
    var dynamicPath = function (req, res, next) { 
    return static(req, res, next); 
    } 
    dynamicPath.setPath = function (newPath) { 
    static = app.loopback.static(newPath, { etag: false}) 
    } 
    return dynamicPath; 
} 

exports.determineClient = function(app, dynamicPath){ 
    return function(req, res, next) { 
    if(req.cookies && req.cookies.version != "client2"){ 
     dynamicPath.setPath("client"); 
    }else{ 
     dynamicPath.setPath("client2"); 
    } 
    next(); 
    } 
} 

根据cookies中的变量,它切换路径。值得注意的是禁用etag,这是由于浏览器存储以前的客户端并确定他们的文件是否仍然可行以保持关键。

此代码在应用程序的早期阶段使用,在这种情况下,Loopback(由核心使用Express)。