2017-04-25 6 views
1

私はexpressを使って2つのディレクトリから静的ファイルを提供しようとしています。複数の静的ルート正規表現解析を表現する

私は2つのディレクトリから提供していた理由は、ディレクトリ#1では2

ディレクトリ#に一致するディレクトリ名を持つディレクトリ#1に提供されてファイル間の衝突を命名によるもので、それはファイルのみが含まれます:私の目的は、フォローを行うことができるようにすることです

/path/to/dir2/foo/bar   (where 'foo' is a dir && 'bar' is a file) 

:ディレクトリ#2で

/path/to/dir1/foo    (where 'foo' is a file) 

、それはファイルが含まれているサブディレクトリが含まれていますコマンドをINGの:

wget "http://myserver:9006/foo" 
wget "http://myserver:9006/foo/bar" 

次のスニペットは、私のためのディレクトリ#2まで、すべてを達成するでしょう:

​​

Iがあるかどうかを確認するために正規表現を有する第二のスタティックルートを追加しようとしています私はディレクトリ#2にそれを向けることができるようにルートの '/'。私はこれらの線に沿って何かを考えているが、任意の成功を持っていなかった。

app.use('/[^/]*([/].*)?', express.static('/path/to/dir2/')); 

または

app.use('/.*/.*', express.static('/path/to/dir2/')); 

私は任意の助けをいただければ幸いです。

ありがとうございます!

答えて

1

the docsによれば、express.staticを複数回呼び出すことができ、ディレクトリを指定した順序でファイルを検索します。

フォルダ構造:

/ 
    static/ 
    s1/ 
     foo # Contents: s1/foo the file 
    s2/ 
     foo/ 
     bar # Contents: s2/foo/bar the file. 

アプリは2つの静的行を除いて、あなたの正確なコードです:

const express = require('express') 
const app = express() 

app.use('/', express.static('static/s1')) 
app.use('/', express.static('static/s2')) 

const server = app.listen(9006,() => { 
    let host = server.address().address 
    let port = server.address().port 

    console.log(`Example app listening at http://${host}:${port}`) 
}) 

そして期待通りのページが働く

$ curl localhost:9006/foo 
s1/foo the file 

$ curl localhost:9006/foo/bar 
s2/foo/bar the file. 
+0

が魅力のように働きました!本当にありがとう! – jlents