Фильтры на express.js
Я хочу сделать фильтр, подобный рельсам, перед фильтром на express.js.
У меня есть файл с именем photo.js, где я размещаю все свои связанные с фотографией маршруты. Но мне нужно перенаправить пользователя, который не аутентифицирован в моей системе на странице входа. Я хочу сделать beforeFilter, поэтому мне не нужно ставить эту логику на всех моих маршрутах...
Спасибо
Ответы
Ответ 1
Если вы хотите сохранить все в своем файле 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
являются функциями.
Посмотрите документацию для app.VERB и app.all в http://expressjs.com/api.html#app.all
Ответ 2
Существуют расширения или структуры более высокого уровня, такие как express-resource.
Ответ 3
Концепция rails before_filter тесно связана с концепцией промежуточного программного обеспечения от connect, которая является частью выражения. Вы можете настроить это вручную, проследив каждый связанный с фотографией маршрут с помощью функции аутентификации или использовать что-то высокоуровневое, как упомянуто в 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
.