Передача данных между экспресс-маршрутизатором и промежуточным ПО

1

Я пытаюсь написать специальное промежуточное программное обеспечение, чтобы проверить правильность JWT в заголовке авторизации. Это кажется довольно простым, но я не хочу, чтобы он работал на всех маршрутах (например, не на маршрутизаторах входа/регистрации).

Поэтому я хотел бы указать в объявлении маршрутизатора, что для маршрута должен быть допустимый токен. Например, что-то вроде этого

const controllers = require('../controllers');

module.exports = (app) => {

    app.post('/auth/signup', controllers.auth.signup.post);
    app.post('/auth/login', controllers.auth.login.post);

    app.get('/teams', controllers.teams.get, {requiresToken:true});

};

Кроме того,.post и.get не принимают третий параметр, и контроллер принимает только параметры (req, res, next), поэтому я не могу увидеть способ передачи исходных данных для каждого маршрута. Я уверен, что мне не хватает чего-то простого

Теги:
express

2 ответа

1
Лучший ответ

Вот как я создал промежуточное программное обеспечение для передачи данных в

module.exports = function(options) {
   return function (req, res, next) {
        //write your code here
        // here you can access options variable
        console.log(options.data)
        next();
   }
}

Как вы называете это промежуточное ПО следующим образом

app.use(middleware({'data' : 'Test'}));

Использовать на маршруте

app.post('/userRegistration', middleware({'data' : 'Test'}), (req, res) => {});
  • 0
    Если я не пропустил что-то, это позволит вам передавать данные в промежуточное ПО один раз при создании экземпляра промежуточного программного обеспечения. Нет, на маршрут при создании маршрута?
  • 0
    Привет @jonhobbs, я обновил ответ, чтобы добавить route basis middleware
Показать ещё 1 комментарий
1

Вы можете исключить подпрограмму auth из этого промежуточного программного обеспечения с помощью функции regexp с отрицательным поиском:

const controllers = require('../controllers');

module.exports = (app) => {

    app.use(/\/((?!auth).)*/, yourJwtTokenValidatorMethod); // replace with your jwt token validator middleware

    app.post('/auth/signup', controllers.auth.signup.post);
    app.post('/auth/login', controllers.auth.login.post);

    app.get('/teams', controllers.teams.get, {requiresToken:true});

};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню