강의

멘토링

커뮤니티

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

우오앙님의 프로필 이미지
우오앙

작성한 질문수

따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)

overload 에러

해결된 질문

작성

·

139

·

수정됨

0

import {Router, Request, Response} from "express";
import {User} from "../entities/User";
import { validate, Validate } from "class-validator";

const register = async (req: Request, res: Response) => {
    const {email, username, password} = req.body;
    
    try{
        let errors: any = {};

        //이메일/유저이름 단일성 확인
        const emailUser = await User.findOneBy({email});
        const usernameUser = await User.findOneBy({username});
        //이미 있으면 erros 객체에 넣음
        if(emailUser) errors.email = "이미 해당 이메일 주소가 사용되었습니다."
        if(usernameUser) errors.username = "이미 사용자 이름이 사용되었습니다."

        //에러가 있으면 return으로 에러를 response 보내줌
        if(Object.keys(errors).length > 0){
            return res.status(400).json(errors)
        }
        
        const user = new User();
        user.email = email;
        user.username = username;
        user.password = password;
        
        //엔터티에 정해 놓은 조건으로 user 데이터 유호성 검사를 해줌
        errors = await validate(user);

        //유저 정보를 user table에 저장
        await user.save()
        return res.json(user);
    } catch(error){
        console.error(error);
        return res.status(500).json({error})
    }
}

const router = Router();
router.post("/register", register);

export default router
캡처.PNG.webp11.PNG.webp

맨 위 코드(auth.ts)에서 사진과 같이 overload 에러가 뜹니다.

유저이름/이메일 중복 및 에러 처리하는 코드 중 return으로 응답을 반환하는 중 타입이 맞지 않아서 생기는 오류 같은데 어떻게 해결할 수 있을까요??

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

우오앙님이 겪고 있는 문제는 TypeScript와 Express를 함께 사용할 때 자주 발생하는 타입 불일치 문제인 것 같습니다. 특히, TypeScript의 타입 정의가 Express의 요청 및 응답 객체와 잘 맞지 않는 경우가 종종 있습니다.

위의 문제를 해결하기 위해 몇 가지 확인해야 할 사항과 제안을 드리겠습니다:

  1. express 타입 정의 확인: express 패키지가 최신 버전으로 설치되어 있는지 확인합니다. 만약 오래된 버전이라면 @types/express도 함께 업데이트해 보세요.

  2. 타입 명시 확인:

    • register 함수의 반환 타입을 명시적으로 지정해 보세요. 예를 들면:
      
      const register = async (req: Request, res: Response): Promise<Response> => {
      // 기존 코드 ...
      }
      

    • 특히, 타입스크립트가 expressRequestResponse 타입을 제대로 인식하지 못하는 경우가 있습니다. 이때 as 키워드를 사용해 명시적으로 타입을 선언하는 방법도 고려할 수 있습니다.
  3. 타입 정의 확장하기: 만약 특정 확장된 타입이 필요한 경우, express 모듈 타입을 커스텀하여 확장할 수도 있습니다.

  4. 동일한 오류 참고하기: 다른 사용자들이 비슷한 문제를 해결한 사례를 참조하면 도움이 될 수 있습니다. 아래 링크에서 유사한 오류와 해결 방안을 확인해 보세요:

각 오류와 해결 방안을 살펴본 후에도 문제가 해결되지 않는다면, 코드의 다른 부분이나 환경 설정과 관련된 부분을 추가로 확인하는 것이 좋습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

우오앙님의 프로필 이미지
우오앙
질문자

제시해 주신 해결방법 다 해봐도 안되다가 구글링해서 해결했습니다.

저랑 비슷한 문제 겪는 분들

npm i -D @types/express@4

으로 최신 버전이 아닌 오히려 다운 그레이드 하시면 바로 해결 됩니다!

도움이 되고자 댓글 남기고 갑니다~

덕분에 에러해결했습니다. 감사합니다!

우오앙님의 프로필 이미지
우오앙

작성한 질문수

질문하기