인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

roider2316님의 프로필 이미지
roider2316

작성한 질문수

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

라이브러리 코드 타이핑하기

에러처리 미들웨어 타입 에러

해결된 질문

작성

·

401

·

수정됨

0

질문1)

app.use((err, req, res, next) => {
  res.locals.message = err.message;
  res.locals.error = process.env.NODE_ENV !== "production" ? err : {};
  res.status(err.status || 500);
  res.render("error");
});

이 부분에서 err, req, res, next 매개변수에 각각 "매개 변수에는 암시적으로 'any' 형식이 포함됩니다.ts(7006)" 에러가 떠서

const errorHandler: ErrorRequestHandler = (err, req, res, next) => {
  console.error(err);
  res.locals.message = err.message;
  res.locals.error = process.env.NODE_ENV !== 'production' ? err : {};
  res.status(err.status || 500);
  res.render('error');
};
app.use(errorHandler);

이런식으로 타입을 달아줬는데 깃허브에선 errorHandler 분리까지만 되어있고 따로 타입을 달아놓지 않았더라고요. 이건 다른 방법으로 처리하셨나요?

질문2) @types/express 설치했는데 왜 해당 에러처리 미들웨어에서만 타입 적용이 되지 않은 것이죠?

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

  1. 타입을 달아놓는게 맞습니다.

  2. app.use에 req.res.next나 err.req.res.next 둘 다를 넣을 수 있어서 익스프레스는 자체적으로 둘 중에 무엇인지 구별할 수 없으므로 @types/express로는 안 되고 직접 타입을 정해줘야 합니다.

roider2316님의 프로필 이미지
roider2316
질문자

아하 감사합니다!

roider2316님의 프로필 이미지
roider2316

작성한 질문수

질문하기