• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

이전 질문에 이어서 새로운 문제가 생겼습니다.

22.02.04 22:25 작성 조회수 107

0

이전에 제가 아래 코드를 사용해서 변경점을 나타내려 하였습니다.

const modified = await User.update(
            {
                name,
                age,
                married,
                comment,
            },
            {
                where: { name: params },
            }
        );

이 코드를 사용한다 한들 변경만 해줄 뿐, 변경점을 나타낼수는 없었습니다. 그래서 저는 코드를 아래 처럼 수정했습니다.

const { name, age, married, comment } = req.body;
    try {
        const params = decodeURIComponent(req.params.who);

        const getOld = async () => {
            const usersBefore = await User.findAll({
                where: { name: params },
            });
            return JSON.stringify(usersBefore[0].dataValues);
        };

        await User.update(
            {
                name,
                age,
                married,
                comment,
            },
            {
                where: { name: params },
            }
        );

        const getNew = async () => {
            const usersAfter = await User.findAll({
                where: { name: params },
            });
            return JSON.stringify(usersAfter[0].dataValues);
        };

        const result1 = await getOld();
        const result2 = await getNew();
        const message = "유저가 변경되었습니다!";

        res.render("show", { result1, result2, message });
    } catch (err) {
        console.error(err);
        next(err);
    }

 간략하게 제 기준에서 설명드리자면 update()함수를 쓰기 전, 즉 변경전에 데이터를 getOld 함수안에 User.findAll()안에 where옵션으로 라우트 매개변수를 가져옵니다. 저는 여기서 데이터를 바꾸기 전에 데이터가 getOld함수안에 저장되어 있을 거라고 생각했습니다.  그 다음에 User.update() 함수로 데이터를 변경합니다. 그리고 데이터가 변경 되어 있을테니 데이터베이스에서 다시한번 getNew() 함수를 통해서 User.findAll()함수로 바꿔져 있을(제 기준입니다.) 데이터를  getNew함수안에 저장되었을 거라 생각했습니다.

 즉 'User.update()를 기준으로 getOld와 getNew에는 각각 변경전과 변경후 데이터가 담겨져 있을거다' 라고 생각했습니다. 하지만 저의 예상은 보기좋게 빗나갔네요 ㅋㅋ getOld와 getNew에는 둘다 똑같이 변경후의 데이터가 저장되어있었습니다. 나름 괜찮은 발상이었는데 변경전 데이터와 변경후 데이터를 어찌 나누면 좋을지 궁금합니다.

답변 1

답변을 작성해보세요.

0

await getOld를 await User.update 전에 하셔야죠. 업데이트 후에 하시면 당연히 업데이트된 데이터를 가져오죠.

getOld랑 getNew랑 잘 보시면 똑같은 함수입니다.

이승훈님의 프로필

이승훈

질문자

2022.02.05

await getOld() 배치 순서를 변경했더니 해결되었습니다. 감사합니다!