2016-04-04 21 views
1

ノードエクスプレスで一連の静的ルートを使用していて、非常に奇妙な現象が発生しています。ノードの静的ルーティング

は、ルーティングが'/list/*''/setup/*'12345に情報を格納しますページurl/setup/12345上の情報を更新たとえば、ディレクトリはストレージIDとして種類の使用されているさまざまなHTML-ファイルになるように設定されています。

スクリプトなどを読み込むことができるようにするには、/assets/と一致する正規表現を使用してurl/setup/assets/script.jsにアクセスし、新しいストレージIDを使用してsetup.htmlにルーティングする必要があります。

私の問題は、これがurl/setup/assets/script.jsでは動作しますが、同じルーティングを持っていてもurl/list/assets/script.jsでは動作しないということです。


編集:url/list/assets/script.jsへの移動

list.html(不要動作)につながる

url/setup/assets/script.jsへの移動は、「(行動を望んでいた)


理由上の任意のアイデアscript.jsにつながります/リスト/ * '`は動かない?ここで

は私の静的ルートです:

app.use(/assets/, express.static(wwwPath)); 

app.use('/list/*', function(req, res, next) { 
    res.sendFile('list.html', { root: wwwPath }); 
}); 

app.use('/setup/*', function(req, res, next) { 
    res.sendFile('setup.html', { root: wwwPath }); 
}); 
+0

複数のルールが同じパスに一致する競合するルールを作成しないと、より良い結果が得られます。今のところ、 ''/list/* ''と'/assets'の両方が、動作しないURLと一致します。おそらく、 '/ setup/assets'と'/list/assets'の静的ルールを作成するほうがずっと良いでしょう。そして、すべてが重なり合うことなく、矛盾なく、きれいになります。 – jfriend00

+0

"/ list/*'はまったく意味がありますか? – Arbel

+0

@Arbel - url/list/assets/script.jsに移動するとlist.htmlになります(不要な動作) url/setup/assets/script.jsに移動するとscript.jsが表示されます(動作が必要です) – Presidenten

答えて

0

ソリューションは、カスタムミドルウェアを使用することでした。新しいルートは次のとおりです。

var requestParser = function(req, res, next) { 
    if(req.originalUrl.indexOf('/assets/') >= 0) { 
     var assetPath = path.join(wwwPath, req.path.slice(req.url.indexOf('/assets/'))); 
     fs.stat(assetPath, function(error, stat){ 
      if(stat && stat.isFile()) { 
       res.sendFile(assetPath); 
      } 
      else{ 
       res.status(404).send('<h1>404</h1>'); 
      } 
     }); 
    } 
    else { 
     next(); 
    } 
}; 

app.use(requestParser); 

app.use('/list/*', function(req, res, next) { 
    res.sendFile('schema.html', { root: wwwPath }); 
}); 

app.use('/setup/*', function(req, res, next) { 
    res.sendFile('setup.html', { root: wwwPath }); 
}); 
関連する問題