Передать параметр в функцию Express JS - PullRequest
0 голосов
/ 22 сентября 2018

все хорошо?Я хотел бы знать лучший способ и, если возможно, отправить определенный параметр в экспресс-функцию в NodeJS.

Я хочу передать строку ('admin') или другую строку, которую я хочу функционировать'RoleTolen', используя мой маршрут.

функция verifyToken

function verifyToken(req, res, next) {
  // Get auth header value
  const bearerHeader = req.headers["authorization"];
  // Check if bearer is undefined
  if (typeof bearerHeader !== "undefined") {
    // Split at the space
    const bearer = bearerHeader.split(" ");
    // Get token from array
    const bearerToken = bearer[1];
    // Set the token
    req.token = bearerToken;
    // Next middleware
    next();
  } else {
    // Forbidden
    res.sendStatus(403);
  }
}

функция ValidToken

function validToken(req, res, next) {
  jwt.verify(req.token, process.env.SECRET, (err, authData) => {
    if (err) {
      res.sendStatus(403);
    } else {
      next();
    }
  });
}

функция RolesToken

function rolesToken(role, req, res, next) {
  var decoded = jwt.decode(req.token);
  if (!decoded.permissions.includes(role)) {
    res.json("sem permissao");
  } else {
    next();
  }
}

мой маршрут

router.post(
  "/posts",
  verifyToken,
  validToken,
  rolesToken("admin"),
  customerController.posts
);

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

из документов Определите функции промежуточного программного обеспечения для обработки ошибок так же, как и другие функции промежуточного программного обеспечения, за исключением четырех аргументов вместо трех, в частности с сигнатурой (err, req, res, next)):

Функция RolesTaken не будет работать должным образом.

Во-вторых, вы можете создать промежуточное программное обеспечение или изменить существующее

(req, res, next) => {
  //some stuff

   if(req.path == '/posts') req.role= 'admin';
   if(req.path == '/someOtherPath') req.role= 'someRole';

  //some other stuff
}

Теперь вы можете получить роль в req.someProp в вашемконтроллер middlerware as req.role

вы хотели бы посмотреть этот вопрос также

0 голосов
/ 22 сентября 2018

function rolesToken(role, req, res, next) не является надлежащим обработчиком маршрута Express.js, как вы уже знаете (и, следовательно, вопрос, я полагаю).

Что вы можете сделать, это написать свой rolesToken как функциювозвращает действительный обработчик, совместимый с Express.js (функция):

function rolesToken(role) {
  return function(req, res, next) {
    var decoded = jwt.decode(req.token);
    if (!decoded.permissions.includes(role)) {
      res.json("sem permissao");
    } else {
      next();
    }
  };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...