Функция в обработчике маршрута - PullRequest
0 голосов
/ 10 января 2020

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

const myRouteHandler = (req,res,next) => {

    const user = getUserFromDb();

    stuffThatMultipleHandlersUse(user, next);

    // Only do this stuff, if the above function did not return
    return res....
}

const stuffThatMultipleHandlersUse(user, next) {
    if(!user.something) {
        return next(new AppError(...));
    }
}

В основном я пытаюсь взять кусочки функциональности, которые используются в нескольких обработчиках маршрутов, и переместить эту функциональность в свои собственные функции, чтобы мои обработчики маршрутов были короткими и DRY.

Но проблема с вышесказанным заключается в том, что даже если в функции сработает return next(new AppError(...));, в обработчике маршрута все равно будет выполняться return res..... Как я могу решить это?

1 Ответ

0 голосов
/ 10 января 2020

Вы можете сделать что-то вроде этого кода ниже:

const myRouteHandler = (req,res,next) => {

  const user = getUserFromDb();

  stuffThatMultipleHandlersUse(user).then(result => {
    return res...
  }).catch(err => {
    console.log(err);
  });
}

const stuffThatMultipleHandlersUse(user) {
  return new Promise((resolve, reject) => {
    if(!user.something) reject(new AppError(...));
    resolve(user);
  })
}

Я надеюсь, что это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...