2014-03-13 62 views
2

我在查找是否有可能僅從Express.js靜態目錄中提供一種類型的文件(通過擴展名進行過濾)。僅從Express靜態目錄提供.js文件?

例如,假設我有以下的靜態目錄:

Static 
    FileOne.js 
    FileTwo.less 
    FileThree.html 
    FileFour.js 

而且說我想和可用.js擴展到任何給定的請求只有文件和所有其他請求會得到一個500響應(或類似的東西)。

我該如何去做到這一點? Express是否有我無法找到的烘焙過濾器,還是我需要使用正則表達式?

回答

1

在我看來,你不能以這種方式配置「靜態」中間件。在"serve-static" module中,替換Express 4.0(當前處於RC階段)的「靜態」,有一些選項,但沒有過濾。

如果你只想提供* .js文件,你可以自己創建一個路徑。如果請求的文件是.js,則創建一個app.get('/static/*'),該文件響應文件內容和適當的MIME類型。

另一種方法是分叉「靜態」模塊,或更好的新的「服務靜態」,以便它符合您的需求。 例如,你可以創建一個新的庫複製的this file內容,和行之後

var originalUrl = url.parse(req.originalUrl); 

您可以添加類似

if(originalUrl.slice(-3) != '.js') return next(); 

這應該忽略(調用next中間件)的所有請求用於不以「.js」結尾的靜態文件。 (未經測試,但它是由上面的代碼啓發)

通過上面的代碼,創建一個新的庫(例如,它保存在「LIB/MY-static.js」),包括它:

app.use(require('lib/my-static')) 
+0

感謝@Qualcuno,我會試驗這個,看看我能想出。 – AJB

1

我用

app.get(/static\/.*js$/, function(r, s){ 

app.get('*', function(r, s){ 
    if(r.url.match(/.*js$/)) // then serve 
}) 
相關問題