我想在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