出来ますか?静的ファイルを提供するために 2 つの異なるディレクトリを設定したいと考えています。/public と /mnt としましょう
7 に答える
次のように追加の (最初の) パラメータを指定することで、静的ファイルが Web に提供されるパスを設定することもできますuse()
。
app.use("/public", express.static(__dirname + "/public"));
app.use("/public2", express.static(__dirname + "/public2"));
そうすれば、2 つのローカル ディレクトリ間でフェールオーバーする 1 つの URL パスではなく、ローカル ディレクトリをミラーリングする 2 つの異なるディレクトリを Web 上に取得できます。
つまり、URL パターンは次のようになります。
http://your.server.com/public/*
次の場合に、ローカル ディレクトリからファイルを提供しますpublic
。
http://your.server.com/public2/*
ローカル ディレクトリからファイルを提供しますpublic2
。
ところで、これは、静的にサーバーのルートからではなく、より修飾されたパスからファイルを提供したくない場合にも役立ちます。
HTH
ディレクトリを単一の可視ディレクトリに「マージ」することもできます
ディレクトリ構造
/static
/alternate_static
コード
app.use("/static", express.static(__dirname + "/static"));
app.use("/static", express.static(__dirname + "/alternate_static"));
static と alternate_static の両方が、同じディレクトリにあるかのように提供されます。ただし、ファイル名の破壊には注意してください。
1 回のミドルウェア インジェクションでは不可能ですが、static
ミドルウェアを複数回インジェクトできます。
app.configure('development', function(){
app.use(express.static(__dirname + '/public1'));
app.use(express.static(__dirname + '/public2'));
});
説明
connect/lib/middleware/static.js#143を見てください:
path = normalize(join(root, path));
で定義または呼び出すoptions.root
静的ルートと、リクエストパスがあります。express.static
connect.static
path
詳しくはconnect/lib/middleware/static.js#154をご覧ください:
fs.stat(path, function(err, stat){
// ignore ENOENT
if (err) {
if (fn) return fn(err);
return ('ENOENT' == err.code || 'ENAMETOOLONG' == err.code)
? next()
: next(err);
パスは一度だけチェックされ、ファイルが見つからない場合、リクエストは次のミドルウェアに渡されます。
Connect 2.x のアップデート
コードへのリンクは Connect 2.x では実際にはありませんが、複数の静的ミドルウェアの使用は以前と同様に可能です。