Как использовать POST-маршрут в качестве промежуточного программного обеспечения - PullRequest
0 голосов
/ 09 июня 2019

У меня есть 2 маршрута

  1. users.js POST api/users
  2. auth.js POST api/auth/confirmation

Я хочу использовать auth/confirmationв качестве промежуточного программного обеспечения в маршруте /users

Я попытался создать временную функцию и использовать res.redirect(...), но она выдает ошибку Cannot GET ....

Я могу изменить структуру программы, чтобы она работала, но я хочу заставить его работать таким образом, используя другой маршрут в качестве промежуточного программного обеспечения

Функция Temp, которую я попробовал


    checkk = (req, res, next) => {

        console.log('middleware')
        res.redirect('api/auth/confirmation')
        next()
    }

auth / auth.js


    router.post('/confirmation', (req,res)=>{
        //do something
    })

/ users.js


    router.post('/', auth.checkk, async (req, res) => {
        res.send("user route")
    })

Ожидаемый выход

middleware
confirm route (If some error occurs it will go back with response)
user route

Iне хочу, чтобы пользователи нажимали на /auth/confirmation конечную точку самостоятельно, но через /users.

Edit

Я использую express-validator для проверки тела запроса, и я хочупромежуточное ПО для проверки того, что

router.post('/confirmation', [
    check('name', 'Name is required').not().isEmpty(),
    check('email', 'Enter valid email').isEmail(),

1 Ответ

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

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

  1. Пользователь делает запрос на доступ к безопасному маршруту POST /users
  2. Первый компонент промежуточного программного обеспечения устанавливает пользовательский контекст, например:
function setUserContext(req,res,next) {
    // get user from session or decode a JWT from auth header etc.
    if (user) {
        // user will be available for the lifetime of the request
        req.user = user
    }
    next()
}

Используйте это промежуточное ПО на всех маршрутах: app.use(setUserContext)

Вторая функция промежуточного программного обеспечения может быть применена к маршрутам, которые требуют защиты:
function requireLoggedInUser(req,res,next) {
    if (req.user) {
        return next()
    }
    throw new Error("You need to be logged in")
}

Применить к маршруту пользователя: app.post('/users', requireLoggedInUser, (req, res) => { ... })

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

...