>

노드 js에서 express의 라우터 확장 확장과 함께 사용할 오류 처리 래퍼를 만들려고합니다.

초심자의 경우 간단히 비동기 처리기 함수를 래핑하려고합니다.

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

    이러한 미들웨어가 필요합니다

    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"));
    }));
    
    

관련 자료

  • 이전 amazon ec2 - 크론에서 실행 된 스크립트에 파이썬 패키지를 사용할 수 없음
  • 다음 android - API 21 그리드