我想在express.js上過濾之前像rails一樣執行過濾器。 我有一個名爲photo.js的文件,我將所有與照片相關的路線放在那裏。但我需要將未在我的系統上進行身份驗證的用戶重定向到登錄頁面。我想做一個beforeFilter所以後來我不需要把這種邏輯在我所有的路線......express.js上的過濾器
感謝
我想在express.js上過濾之前像rails一樣執行過濾器。 我有一個名爲photo.js的文件,我將所有與照片相關的路線放在那裏。但我需要將未在我的系統上進行身份驗證的用戶重定向到登錄頁面。我想做一個beforeFilter所以後來我不需要把這種邏輯在我所有的路線......express.js上的過濾器
感謝
如果你想保留你的photo.js文件中的所有內容,我認爲更好的方法是使用app.all並傳遞內置到應用程序路由中的多個回調函數(其工作方式類似於路由中的中間件)。例如
app.all('/photo/*', requireAuthentication, loadUser);
app.get('/photo/view', function(req, res) {
res.render('photo_view');
});
app.get('/photo/list', function(req, res) {
res.render('photo_list');
});
凡requireAuthentication
和loadUser
的功能。
有擴展或更高級別的框架,如express-resource。
爲app.VERB文檔和app.all如何表達資源的責任/過濾器鏈幫助像問題就在這裏?基本上github沒有舉例,你有嗎? – 2014-01-17 12:59:35
rails before_filter概念與連接中的中間件概念密切相關,這是express的一部分。你可以手動設置它,方法是在每個與照片相關的路由前加上你的認證功能,或者使用像TJ這樣的高級別的東西。要手工做只會是這樣的(僞CoffeeScript的)問題
myAuthMiddleware = (req, res, next) ->
if not req.session.user?
res.redirect "/"
else
next()
editPhoto = (req, res) ->
....
deletePhoto = (req, res) ->
....
app.use(myAuthMiddleware, func) for func in [editPhoto, deletePhoto]
那是什麼要說的是使用myAuthMiddleware
喜歡的editPhoto
和deletePhoto
中間件功能的before_filter。
使用'all'是一種很好的方法。我在'express-'resource之上爲我的路由使用它,並且它非常適合身份驗證和授權。 – JohnnyCoder 2013-11-20 02:21:48