2011-10-12 89 views
4

是否有一種將靜態客戶端文件資源(腳本,圖像等)捆綁到Express模塊​​並系統地避免命名衝突的優雅方法?這是很容易註冊的靜態對象的特定模塊實例,像這樣:Node.js模塊特定的靜態資源

app.use(express.static(modulePath + '/public')); 
app.use(express.static(__dirname + '/public')); 

但如果這兩個目錄中包含「styles.css的」文件,它似乎是從模塊的一個將超過一爲應用程序。模塊的公衆中的子目錄可以用來避免這個問題,但我真正想要的是模塊的資源映射到這樣的任意路徑的方式,

http://localhost:3000/mymodule/styles.css => <modulePath>/public/styles.css 
http://localhost:3000/styles.css => <appPath>/public/styles.css 

是否已有一個辦法做到這一點?我已經完成了編碼技巧,所以我真的在尋找推薦的方法來完成它。另外,如果我錯過了一些完全不必要的關鍵概念,我也想了解這一點。

回答

5

您可以創建connect.static另一個實例和路線中使用它:

app = express.createServer() 

app.configure(function(){ 
    app.use(express.static(__dirname+'/public')) 
}) 

// new static middleware 
var myModuleStatic = express.static(__dirname+'/mymodule') 

// catch all sub-directory requests 
app.get('/mymodule/*', function(req, res){ 
    // remove subdir from url (static serves from root) 
    req.url = req.url.replace(/^\/mymodule/, '') 
    // call the actual middleware, catch pass-through (not found) 
    myModuleStatic(req, res, function(){ 
     res.send(404) 
    }) 
}) 

app.listen(5555) 
+0

釘它。謝謝。 –