깊은바다거북
개발 공부 기록
깊은바다거북
전체 방문자
오늘
어제
  • 분류 전체보기 (219)
    • JAVA (9)
    • JavaScript (15)
    • 스파르타코딩클럽 (11)
      • [내일배움단] 웹개발 종합반 개발일지 (5)
      • [내일배움캠프] 프로젝트와 트러블 슈팅 (6)
    • SQL | NoSQL (4)
    • CS 등등 (0)
    • TIL | WIL (173)
    • 기타 에러 해결 (3)
    • 내 살 길 궁리 (4)

인기 글

최근 글

최근 댓글

태그

  • 재귀 함수
  • 자바스크립트 기초 문법
  • BST(이진 탐색 트리)
  • Linked List
  • DFS(깊이우선탐색)
  • BFS(너비우선탐색)
  • 시간 복잡도
  • Inorder Traversal(중위 순회)
  • Binary Tree(이진 트리)
  • Leetcode
  • 01. 미니 프로젝트
  • TypeScript
  • Backtracking(백트래킹)
  • Trie
  • 프로그래머스
  • 최소 힙(Min Heap)
  • 최대 힙(Max Heap)
  • 트러블 슈팅 Troubleshooting
  • 코딩테스트 연습문제
  • tree
  • 자료 구조
  • 자잘한 에러 해결
  • 혼자 공부하는 자바스크립트
  • Til
  • Preorder Traversal(전위 순회)
  • POST / GET 요청
  • 팀 프로젝트
  • leetcode-cli
  • TIT (Today I Troubleshot)
  • 점화식(Recurrence Relation)
hELLO · Designed By 정상우.
깊은바다거북

개발 공부 기록

TIL | WIL

1/3 (몸 관리 실패, 화) TIL

2023. 1. 3. 21:27

(노드 심화 주차 프로젝트 중)

눈이 뜨겁다.

어제 내가 맡은 파트의 백 API를 만들고, 오늘은 프론트에서 요청을 보내오는 코드를 짰다. 대강의 html 페이지를 만들어놓고만 하려고 했는데도 근 한 달만에 해봐서 그런지 막막했다. 실제로 잘 동작하는지는 내일 더 건강한 컨디션으로 확인해봐야겠다.


프론트 동작 탐구

로그인 처리

- ajax() 방식과 axios 방식의 공통점과 차이점이 확연히 보인다.

  • Ajax 버전:
// 로그인
function sign_in() {
  let email = $("#inputEmail").val();
  let password = $("#inputPassword").val();
  $.ajax({
    type: "POST",
    url: "/api/auth",
    data: {
      email: email,
      password: password,
    },
    success: function (response) {
      localStorage.setItem("token", response.token);
      window.location.replace("/goods.html");
    },
    error: function (error) {
      customAlert(error.responseJSON.errorMessage);
    },
  });
}
  • axios 버전:
// 로그인
function sign_in() {
  let nickname = document.getElementById('loginNickname').value;
  let password = document.getElementById('loginPassword').value;
  axios
    .post('api/users/login', {
      nickname: nickname,
      password: password,
    })
    .then((response) => {
      console.log(response);
      localStorage.setItem('token', response.data.token);
      window.location.replace('/');
    });
}

로그인 인증 처리

순서대로 잘 따라가보면…

// assets/api.js
function getSelf(callback) {
  $.ajax({
    type: "GET",
    url: "/api/users/me",
    headers: {
      authorization: `Bearer ${localStorage.getItem("token")}`,
    },
    success: function (response) {
      callback(response.user);
    },
    error: function (xhr, status, error) {
      if (status == 401) {
        alert("로그인이 필요합니다.");
      } else {
        localStorage.clear();
        alert("알 수 없는 문제가 발생했습니다. 관리자에게 문의하세요.");
      }
      window.location.href = "/";
    },
  });
}

⇒ 요청이 문제없이 성공하면, callback을 실행시켜라. user 데이터를 넣어가지고.

// assets/order.html
<script src="/api.js"></script>
<script>
  $(document).ready(function () {
    getSelf(function (user) {
      const order = JSON.parse(sessionStorage.getItem("ordered"));
      $("#nickname").text(user.nickname);
      $("#btnOrder")
        .text(
          `$${number2decimals(
            order.reduce(
              (s, o) => s + Number(o.goods.price) * o.quantity,
              0
            )
          )} 결제`
        )
        .click(function () {
          postOrder(user, order);
        });
      $(".btn-confirm").click(function () {
        location.href = "/goods.html";
      });
    }); // 이만큼이 바로 콜백 함수.
  });

  function number2decimals(num) {
    return (Math.round(num * 100) / 100).toFixed(2);
  }
</script>

⇒ 저 getSelf()의 뜻인즉슨, 페이지 로딩이 완료되자마자 로그인 인증을 한 번 거쳐갔다 와서 노란 칠한 저 함수를 실행하라는 얘기이다.


Uploaded by N2T

    'TIL | WIL' 카테고리의 다른 글
    • 1/5 (프론트의 에러는 백엔드와 달라, 목) TIL, TIT
    • 1/4 (3계층 분리 실전 적용, 수) TIL, TIT
    • 1/2 (include 두 번의 반란, 월) TIL, TIT
    • 12/30 (3번째 프로젝트 시작, 금) TIL
    깊은바다거북
    깊은바다거북

    티스토리툴바