[TIL]노드 숙련 개인과제

최하온·2024년 2월 6일
0

TIL

목록 보기
31/71
post-thumbnail

🚨 Issue occuring


회원가입

//- 보안을 위해 비밀번호는 평문(Plain Text)으로 저장하지 않고 Hash 된 값을 저장합니다.
    const hashedPassword = await bcrypt.hash(password, 10);
    const hashedConfirm = await bcrypt.hash(password, 10);
    await prisma.users.create({
      data: {
        email,
        password: hashedPassword,
        confirm: hashedConfirm,
        name,
        grade,
      },
    });
  }

bcrypt 패키지를 사용하여 비밀번호를 10 복잡도로 hash.

로그인

// 3. 로그인 성공 시, JWT AccessToken을 생성하여 반환합니다.
//     - Access Token
//         - Payload: userId를 담고 있습니다.
//         - 유효기한: 12시간
// user가 가지고 잇는 id로 jwt 토큰 발급
  const accessToken = jwt.sign({ userId: user.userId },
                               process.env.ACCESS_TOKEN_SECRET_KEY, { expiresIn: "12h" });
  const refreshToken = jwt.sign({ userId: user.userId },
                               process.env.REFRESH_TOKEN_SECRET_KEY, { expiresIn: "7d" });

jsonwebtoken 패키지의 sign을 사용하여 토큰 발급.
첫 번째 인자로 토큰에 담을 JSON 데이터(payload) 두 번째 인자로는 키(key)

모든 이력서 목록 조회 API

// - 이력서 목록은 QueryString으로 order 데이터를 받아서 정렬 방식을 결정합니다.
//     - orderKey, orderValue 를 넘겨받습니다.
//     - orderValue에 들어올 수 있는 값은 ASC, DESC 두가지 값으로 대소문자 구분을 하지 않습니다.
//     - ASC는 과거순, DESC는 최신순 그리고 둘 다 해당하지 않거나 값이 없는 경우에는 최신순 정렬을 합니다.
//     - 예시 데이터 : orderKey=userId&orderValue=desc

💦What I tried


const orderkey = req.query.orderkey;
const orderValue = req.query.orderValue;

막연하게 오더키를 받아와 주소창에서 사용할 생각이었으나 무언가 이상했다. 요구사항에 맞는 대소문자 여부와 정렬은 전혀 되지 않았다.

💡How solve issue


// req.query.orderkey가 값이 없다면 resumeId을 orderKey에 넣기
const orderKey = req.query.orderKey ?? "resumeId"; 
// req.query.orderValue가 값이 없다면 desc
const orderValue = req.query.orderValue ?? "desc"; 
    select: {
		// ...
    },
// orderBy 객체를 이용하여 정렬 수행
    orderBy: [
      {
        [orderKey]: orderValue.toLowerCase(),
      },
    ],
  });

null 병합 연산자로 쿼리가 비었을 때 넣을 값을 넣어주면 되었다.

0개의 댓글