• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

api추가 질문입니다

22.05.26 05:02 작성 조회수 99

0

api 추가 질문입니다.

router.get('/search/:hashtag', async (req, res, next) => {
  try {
    const result = await request(
      req, `/posts/hashtag/${encodeURIComponent(req.params.hashtag)}`,// 문자를 UTF-8로 인코딩
    );
    res.json(result.data);
  } catch (error) {
    if (error.code) {
      console.error(error);
      next(error);
    }
  }
});

이 코드에서 :hashtag는 인코드 되어서 request함수에 넣었습니다.

router.get('/posts/hashtag/:title', verifyToken, async (req, res) => {
  try {
    const hashtag = await Hashtag.findOne({ where: { title: req.params.title } });
    if (!hashtag) {
      return res.status(404).json({
        code: 404,
        message: '검색 결과가 없습니다',
      });
    }
    const posts = await hashtag.getPosts();
    return res.json({
      code: 200,
      payload: posts,
    });
  } catch (error) {
    console.error(error);
    return res.status(500).json({
      code: 500,
      message: '서버 에러',
    });
  }
});

request함수는 헤더의 authorization에 토큰을 넣어서 이 라우터에 요청합니다.

그렇다면 이 코드의 :title 속성은 인코드된 문자열이지 않나요?

Hashtag모델에 인코드된 문자열이 저장되는 것도 아니던데 왜 인코드된 문자열을 다시 디코드하지 않나요?

const posts = await hashtag.getPosts();
    return res.json({
      code: 200,
      payload: posts,
  });

또 Post에 있는 hashtag를 가져와 posts에 넣어서 json형식으로 출력했더니

이런 형태의 데이터가 나왔는데

Post모델에서 조건에 맞는 hashtag를 가져온것은 이해 했습니다.

그러나 PostHashtag테이블과 UserId컬럼은 왜 가져온것인가요?

혹시 관계 메서드 add set remove get에 대해 정확히 어떠한 인과관계가 나타는지 설명해주실수 있나요?

대충 느낌은 오지만 긴가민가 합니다 ㅜㅜ

 

 

 

 

답변 1

답변을 작성해보세요.

0

welco님의 프로필

welco

2022.05.26

const hashtag = await Hashtag.findOne({ where: { title: req.params.title } });

위의 함수를 사용할 때 저장소에 있는 id 등등 다른것도 같이 posts에 담겨 응답된것 같습니다.

저같은 경우는 class-transformer 라는 라이브러리를 이용해서 필요없는 필드를 제거합니다. user의 password 같은 민감한 필드값은 DB에서 같이 끌고와서 해당 라이브러리를 이용해서 제외시킵니다.



다른 해결법으로는 sql 구문을 직접 사용하면 깔끔할것 같습니다. (SELECT)