Фильтры на 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.