2017-04-07 13 views
0

エクスプレスでは、ミドルウェアを介してファイルを提供する静的フォルダを設定します。私が理解していることから、これはアプリケーションのライフサイクル全体にわたって設定されます。Express静的パスを動的に変更する

代わりに、リクエストごとにserver.jsのどこかに設定できますか?例えば、いくつかの要求は "clientNew"フォルダを使用し、他の要求は "client"を使用します。私はURLを介してではなく、セッションIDを通して違いを見ることができるようにしたい。

+0

エクスプレススタティックの代わりにCDNを使用してみませんか? CDNの場合は、各リクエストレベルで簡単にフォルダ名を変更することができます – vartika

+0

CDNはオプションではありません。複数のクライアントフォルダを使用しており、非常に少量のユーザーに対して多くの変更/増加を行います。私たちが必要とするのは、(クッキーに現在保存されている)リクエストのバージョン番号に応じて、静的フォルダが変更されるという自動解決です。存在しない場合、デフォルトで提供します。 – 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(); 
    } 
} 

cookieの変数に基づいて、pathを切り替えます。注目すべき点は、エタグを無効にすることです。これは、以前のクライアントを保存していて、ファイルが保持可能かどうかを判断するブラウザにとって重要です。

このコードはアプリで早期に使用されます(この場合は、コアでExpressを使用します)。

関連する問題