在express.js上过滤

时间:2012-01-06 19:41:57

标签: node.js express

我希望在express.js上过滤之前做一个类似rails的过滤器。 我有一个名为photo.js的文件,我将所有与照片相关的路线放在那里。但我需要将未在我的系统上进行身份验证的用户重定向到登录页面。我想做一个beforeFilter,所以我不需要把这个逻辑放在我的所有路线中......

由于

3 个答案:

答案 0 :(得分:15)

如果你想保留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');
});

requireAuthenticationloadUser是函数。

http://expressjs.com/api.html#app.all

查看app.VERB和app.all的文档

答案 1 :(得分:3)

express-resource等扩展程序或更高级别的框架。

答案 2 :(得分:3)

rails before_filter概念与connect中的中间件概念紧密相关,这是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,例如editPhotodeletePhoto中间件函数的before_filter。