node.js / express: используйте router.route () с функциями промежуточного программного обеспечения - PullRequest
2 голосов
/ 12 июня 2019

Я хотел бы использовать метод route () на экспресс-маршрутизаторе для обслуживания определенного маршрута разными HTTP-методами. Следующий код работает нормально:

var express = require('express');
var router  = express.Router();

router.route('/register')
  .get(adm.signUpForm)
  .post(adm.signUp);

Однако при попытке использовать промежуточное программное обеспечение на маршруте почты я застреваю. Работает следующий код:

// LOGIN processing
router.post('/login', passport.authenticate("local", {
  successRedirect: '/',
  failureRedirect: '/login'
}), function(){
  //empty
});

Здесь промежуточная функция passport.authenticate (...) вызывается для проверки правильности учетных данных пользователя. Прошедшие проверку пользователи перенаправляются на домашнюю страницу по адресу "/"; Неизвестные пользователи (или с неверным паролем) перенаправляются обратно в форму «/ логин».

Теперь я хотел бы повторно разложить этот код и использовать что-то похожее на пример кода, показанный выше (маршрут регистрации), т.е. е. Я хотел бы использовать router.route ('/ login) .xxxx для обслуживания HTTP-запроса xxxx по маршруту' / login '. Как я могу указать Express использовать мою функцию промежуточного программного обеспечения passport.authenticate при запросе POST к / login?

router.route('/login')
  .get(adm.loginForm)
  .post(<my-middleware-function ???>, adm.login);

... где adm.loginForm - это функция конечной точки, которая выдает форму входа в систему по запросу GET для / login и adm.login является функцией конечной точки, которая должна вызываться, когда сервер получает запрос POST на этом маршруте, т.е. е. как только форма входа в систему будет отправлена.

Насколько мне известно, документация express (4.x) ничего не упоминает об установке функции промежуточного программного обеспечения для определенного маршрута и (в то же время) определенного HTTP-запроса. Я знаю, что router.route ('/ login'). Use () может использоваться для установки функции промежуточного программного обеспечения для всех HTTP-запросов на этом маршруте, но я хочу только свое промежуточное программное обеспечение вызываться по запросам POST.

Есть предложения? Спасибо.

1 Ответ

1 голос
/ 12 июня 2019

Вы можете добавить их там, где вы упомянули:

router.route('/login').post(checkPassport, adm.login)

Вы также можете связать их вместе:

router.route('/login').post(checkPassport).post(adm.login)

checkPassport - это промежуточное программное обеспечение, которое вам нужно написать для обработкилогика аутентификации паспорта

...