2011-08-19 84 views
1

我沒有問題,例如我有一個解決方法。然而,理解和開發解決方法的過程突出了我在我的知識中的一個根本性差距(作爲一個自學成才的程序員,這發生了很多;-)!),我似乎無法找到答案將其插入任何地方。Node.js/Express路由到一個靜態文件的URL

標準的node.js /快速安裝使用,例如:

app.get('/index.htm', function (request, response) { 
    console.log("/index.htm"); 
}); 
app.get('*', function (request, response) { 
    console.log("*"); 
}); 

爲什麼當用戶直接連接到index.htm的(在輸入網址,雖然我還沒有嘗試點擊鏈接)確實沒有火?該頁面沒有問題。明顯的用例是在服務靜態頁面之前檢查用戶是否已通過身份驗證。

僅供參考,解決方法是將用戶傳遞給諸如「/ authenticated」(匹配正常)的路由,執行檢查然後重定向並基本阻止其他所有內容。

感謝教育我提前;-)

ň

UPDATE到Raynos'的問題 - 是的(忽略服務器/應用程序變量名稱不一致)。

// CREATE SERVER 
var server = express.createServer(); 
server.configure(function() { 
    server.use(express.static(__dirname + '/public')); 
    server.use(express.logger()); 
    server.use(express.errorHandler({dumpExceptions: true, showStack: true})); 
// start of session stuff 
server.use(express.cookieParser()); 
server.use(express.session({store: sessionStore, secret: 'secret', key: 'express.sid'})); 
}); 

我現在發現,路由匹配優良,一旦你刪除的靜態文件,即在原來的例子,刪除的index.htm意味着控制檯現在日誌「將/index.htm」。

ň

回答

0

只是帶來一些關閉這個問題:

快速靜態處理程序,如果它發現它會成爲它的文件,它不會讓被稱爲另一個處理程序。如果你刪除它,那麼app.get('/index.htm'處理程序將被調用。如果您希望在所有URL上都回撥所有URL,只需在所有路由器之前添加server.use(function(req, res, next) {...}),並且該函數將在所有路由器上調用,那麼如果您希望調用其他中間件或路由處理程序,請確保您接下來調用。

+0

感謝您花時間回答問題,但自從我問了這個問題後的5年以來,節點世界發生了很多變化,而您的回答雖然現在正確,但當時並非如此。 –