Второе промежуточное ПО вызывается только после метода маршрута - PullRequest
0 голосов
/ 06 октября 2018

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

app.use(function(req, res, next) {
  checkToken(req, res, next);
  checkPermission(req, res, next);
});

app.post("/test", (req, res) => {
  console.log("route");
})

function checkToken(req, res, next){
  console.log("check token");
  if(validToken())
    next();
  else
    res.send("no valid token");
}

function checkPermission(req, res, next){
  console.log("check permission");
  if(permission())
    next();
  else
    res.send("no permission");
}

Вывод, который я получаю:

проверка токена -> маршрут -> проверка разрешения

Вывод, который я ожидаю:

проверить токен -> проверить разрешение -> маршрут

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

Это правильный способ сделать это?

Ответы [ 3 ]

0 голосов
/ 06 октября 2018

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

app.use(checkToken);  // <== first middleware
app.use(checkPermission) // <== Second middleware

app.post("/test", (req, res) => {
    console.log("route");
})

function checkToken(req, res, next) {
    console.log("check token");
    if (validToken())
        next();
    else
        res.send("no valid token");
}

function checkPermission(req, res, next) {
    console.log("check permission");
    if (permission())
        next();
    else
        res.send("no permission");
}
0 голосов
/ 06 октября 2018

См. Также Написание промежуточного программного обеспечения для использования в приложениях Express для лучшего понимания работы промежуточного программного обеспечения.

/* Check token */
function checkToken(req, res, next) {
  console.log("check token");
  if(validToken())
    next();
  else
    res.send("no valid token");
}

/* Check permission */
function checkPermission(req, res, next) {
  console.log("check permission");
  if(permission())
    next();
  else
    res.send("no permission");
}

/* Calling the middleware in right order */
app.use(checkToken, checkPermission, (req, res, next) => {
  next();
});

/* Finally our route */
app.post("/test", (req, res) => {
  console.log("route");
});
0 голосов
/ 06 октября 2018
app.use(checkToken);
app.use(checkPermission);

app.post("/test", (req, res) => {
  console.log("route");
});
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...