2016-04-04 15 views
1

Node Express'te bir dizi statik yol kullanıyorum ve çok garip bir fenomen yaşıyor.Düğüm noktasında statik yönlendirme

yönlendirme '/list/*' ve '/setup/*'12345 yılında bilgi depolamak için sayfada url/setup/12345 hakkında bilgi güncellenmesi örneğin, dizinleri depolama kimliğiyle tür kullanılan farklı html dosyaları alır böylece kurulur.

komut dosyalarını yüklemek mümkün ve bu tür de url/setup/assets/script.js yeni bir depolama kimliği ile setup.html yönlendirmeye gerek kalmadan ulaşılabilir izin /assets/ eşleşen regex ile rota yoksa belirleyin.

Sorunum, bu, url/setup/assets/script.js için çalışıyor, ancak aynı yordamlara sahip olsalar bile url/list/assets/script.js için çalışmıyor.


Düzenleme: url/list/assets/script.js gitme

list.html (istenmeyen davranışa) url/setup/assets/script.js gitme

script.js yol açar yol açar /' neden


Herhangi bir fikir (davranış istedik) liste/* '`çalışmaz?

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

Birden fazla kuralın aynı yolla eşleştiği çakışan kurallar oluşturmazsanız çok daha iyi olursunuz. Şu anda hem ''/liste/* '' hem de '/ varlıklar', çalışmadığı URL ile eşleşiyor. Muhtemelen '/ setup/assets' için bir statik kural oluşturma ve'/list/asset' için bir tane daha çok daha iyisin. Öyleyse, her şey çakışmadan, çakışma olmadan güzel ve net olacaktır. – jfriend00

+0

Tam olarak ne demek "'/list/* 'wont work"? – Arbel

+0

@Arbel - url/list/assets/script.js adresine gitme list.html'ye yönlendirir (istenmeyen davranış) url/setup/assets/script.js dizinine gitmek script.js (aranan davranış) yol açar – Presidenten

cevap

0

çözüm özel ortakatmanını kullanmaktı: Burada

benim statik yolları vardır. Yeni yollar:

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 }); 
}); 
İlgili konular