在express.js上过滤
我想在express.js上过滤之前先做一个像rails的filter。 我有一个名为photo.js的文件,我把所有的照片相关的路线放在那里。 但是我需要将未经过身份validation的用户redirect到login页面。 我想做一个beforeFilter,所以我不需要把这个逻辑放在我所有的路线中。
谢谢
如果你想在你的photo.js文件中保留所有的东西,我认为一个更好的方法是使用app.all并传入内置到应用程序路由中的多个callback函数(在路由中像中间件一样工作)。 例如
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
是function。
看看http://expressjs.com/api.html#app.all的 app.VERB和app.all的文档
有扩展或更高级的框架,如快递资源 。
rails的before_filter概念与连接的中间件概念密切相关,这是express的一部分。 你可以手动设置,通过在你的authenticationfunction之前,每个照片相关的路线,或使用像TJ高层提到的。 手动完成它只是一个这样的事情(伪咖啡标记)
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
像一个before_filter的editPhoto
和deletePhoto
中间件function。