110

出来ますか?静的ファイルを提供するために 2 つの異なるディレクトリを設定したいと考えています。/public と /mnt としましょう

4

7 に答える 7

166

次のように追加の (最初の) パラメータを指定することで、静的ファイルが 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

于 2012-09-28T22:51:38.917 に答える
59

ディレクトリを単一の可視ディレクトリに「マージ」することもできます

ディレクトリ構造

  • /static
  • /alternate_static

コード

app.use("/static", express.static(__dirname + "/static"));
app.use("/static", express.static(__dirname + "/alternate_static"));

static と alternate_static の両方が、同じディレクトリにあるかのように提供されます。ただし、ファイル名の破壊には注意してください。

于 2013-02-12T19:34:08.277 に答える
42

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.staticconnect.staticpath

詳しくは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 では実際にはありませんが、複数の静的ミドルウェアの使用は以前と同様に可能です。

于 2011-05-12T10:23:53.960 に答える