res.redirect()의 URI를 동적으로 설정하기

이지용·2022년 11월 11일
0

TIL

목록 보기
2/4

커뮤니티 사이트를 만들면서 어떤 게시판에는 한 페이지에 두가지 카테고리의 글 목록을 노출시키기로 했다. 프론트는 템플릿 엔진으로 구현했기 때문에 GET 요청을 받으려면 각각의 페이지 정보를 알아와야 했는데 그건 각 페이지 번호를 전역 변수에 저장해놨다가 쿼리스트링에 담아 보내면 백엔드에서는 각 페이지의 글을 보내기로 했다.
다음은 글 작성 부분인데 각 카테고리의 폼을 만들어 다른 API로 요청을 보내기만 하면 되지만 글 작성 이후에도 현재 페이지가 계속 열려있으면 좋겠다는 의견이 있었다.

res.redirect('/shelter');

지금은 POST 요청에 대한 응답으로 /shelter 페이지로 리디렉션하는데, 그러면 둘 다 1페이지로 간다.

const { ..., pages } = req.body;

그래서 위에서 말한 현재 페이지의 값들을 폼 안에 pages라는 이름의 필드로 하나 더 받기로 했다. 형태는 (missing 페이지),(abandoned 페이지)로 받는다.

const [missingPage, abandonedPage] = pages.split(',');

반은 문자열을 String.split() 메서드로 쪼개주고 배열 구조분해 할당으로 각 변수에 저장해줬다.

res.redirect(
  `/shelter?missing=${missingPage || 1}&abandoned=${abandonedPage || 1}`,
);

마지막은 템플릿 리터럴을 써서 res.redirect()의 URI를 동적으로 설정해주면 끝.

하지만 구현을 하고나서 사람들은 보통 새 글을 쓰고 나면 첫 페이지로 돌아가 내가 작성한 글이 잘 있나 확인하고 싶지 않을까?라는 생각이 문득 들었다. 이 기능은 조만간 다시 빼거나 내가 작성하지 않은 카테고리의 페이지만 유지하지 않을까 싶다...


res.redirect(`/shelter?abandoned=${currentPage || 1}`);
res.redirect(`/shelter?missing=${currentPage || 1}`);

결국 글을 새로 작성한 카테고리의 페이지는 1로 보내버리기로 했는데 어차피 값이 없으면 1페이지로 가니까 그냥 날려버렸다.

const currentPage = pages.split(',')[1];
const currentPage = pages.split(',')[0];

페이지를 가져오는 부분도 배열 구조분해에서 각 인덱스의 요소만 가져오게 바꿨다.

0개의 댓글