Итак, в файле уровня маршрутизатора мне нужно защитить почти все маршруты хотя бы одним промежуточным программным обеспечением, за исключением одного маршрута. Пока что пробовал что-то вроде этого:
// comments.js
const express = require('express');
const router = express.Router({ mergeParams: true });
const m = require('../middlewares');
// /api/:newsId/comments - preappended route
router.use((req, res, next) => {
if (req.path == '/' && req.method == 'GET') return next(); // doesn't work, even with next('route')
if (m.isLoggedIn) { // this doesn't work either
next();
}
})
router.get('/', (req, res) => {
// returns comments for :newsId, only this route doesn't need middlewares
})
// all below routes needs at least m.isLoggedIn
router.post('/', (req, res) => {
// creates a new comment
})
// ...
// bunch of other routes which needs middleware m.isLoggedIn and maybe some others
module.exports = router;
Я знаю, что могу добавлять промежуточное ПО на каждый маршрут, но я ищу лучшее решение для использования в router.use ().
Он настроен так, как должен, и работает на всех других маршрутах, но все равно здесь: isLoggedIn: (req, res, next) => паспорт.authenticate ('jwt', {session: false}) (req, res, next). Промежуточное ПО не проблема, просто как защитить маршруты с их помощью в comments.js
req.path будет /api/:newsId/comments. Используйте Regex для проверки всего такого пути. Во втором условии проверьте второй маршрут с помощью Regex и return m.isLoggedIn(req, res, next)Не могу поставить возвращаться в состояние ..
извините просто m.isLoggedIn(req, res, next)
Простите, из головы, не думаю, что это сработает? Поскольку эта функция не возвращает true или false, она просто вызывает обратный вызов следующий() ...
да, когда isLoggedIn вызовет next, express вызовет следующий обработчик.





Показать код
../middlewares