node.js Экспресс-обещание маршрутизатор Обработка ошибок оболочки - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь создать оболочку для обработки ошибок для использования с расширением маршрутизатора обещаний express в nodejs.

Для начала я пытаюсь просто обернуть функцию асинхронного обработчика:

function error_catcher(f)
{
    return (async function (request, response) {
        await f(request, response);
    });
}

router.get("/bar", (error_catcher((async (request, response) => {
    throw (new Error("bar error"));
}))()));

Однако, когда я запускаю это, я получаю:

Error: Expected a callback function but got a [object Promise]
    at wrapHandler (/tmp/complete/node_modules/express-promise-router/lib/express-promise-router.js:10:15)
    at /tmp/complete/node_modules/express-promise-router/lib/express-promise-router.js:87:24
    at Array.map (<anonymous>)
    at Function.instanceToWrap.(anonymous function) [as get] (/tmp/complete/node_modules/express-promise-router/lib/express-promise-router.js:86:38)
    at Object.<anonymous> (/tmp/complete/server.js:361:8)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)

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

1 Ответ

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

Вам нужно промежуточное ПО, подобное этому

const error_catcher = fn =>
  (request, response, next) => {
    Promise
      .resolve(fn(request, response, next))
      .catch(next);
};

, вы можете использовать его как

router.get("/bar", error_catcher(async (request, response, next) => {
  return await next(new Error("bar error"));
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...