2017-04-07 147 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)。