在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'); }); 

其中requireAuthenticationloadUser是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的editPhotodeletePhoto中间件function。