웹개발

웹개발플러스 - 스위터 4

RAN318 2021. 6. 19. 18:16
728x90
반응형

07. 회원가입 페이지 기능만들기

  • 회원가입 기능 만들기
    1. 회원가입할 때는 입력 받은 값들이 형식에 맞는지 우선 확인해야한다'ㅅ'//
      - 아이디: 영문과 숫자, 일부 특수문자(._-)만 사용 가능, 2-10자 길이. 영문 무조건 포함 = is-nickname
      - 비밀번호: 영문, 숫자는 1개 씩 무조건 포함, 일부 특수문자 사용 가능, 8-20자 길이 = is-password
      - 비밀번호 확인 : 비밀번호와 일치
    2. 이렇게 복잡한 조건을 확인할 때는 '정규표현식(Regular Expressions)'을 이용하여 비교하는 것이 좋다.
      형식을 확인하여 결과를 참/거짓으로 반환하는 함수를 정의하면 편리하다고..!!
              
      빨간 밑줄이 정규표현식이에요!!

      1. 그리고 아이디는 다른 사람과 겹치면 안되기 때문에 중복확인을 해주어야겠죠?
        서버로 POST 요청을 보내 아이디가 존재하는지 확인해보자!!
               - 아이디 중복확인 클라이언트

               - 아이디 중복확인 서버

              - 회원가입 클라이언트
               - 회원가입 서버
    3. 이제 이 조건들을 만족할 때만 회원가입 POST 요청을 보내도록 함수를 짜면 끝!


08. 로그인 페이지 기능만들기

  •  로그인 기능 만들기
    1. 로그인 입력값 확인은 훨씬 간단~!! 값을 입력했는지만 확인하고 바로 로그인 POST 요청을 보내보자.
      뒤 기능들을 테스트하며 개발하려면,
      한 아이디로 로그인하여 다른 사용자 프로필 페이지를 봐야하니 테스트용 아이디 2개를 만들어둔다 ㅎ_ㅎ
      - 클라이언트
      - 서버
      이제 아이디와 비밀번호를 제대로 입력했다면, 서버가 JWT토큰을 발행해준다.
        **JWT토큰은 자유이용권 입장권 같은 것!! = 언제까지 이 입장권이 유효하다 라고 적시해줌

로그인 시도한 후 크롬-개발자도구 검사- application가셔 쿠키 확인 할때 아래 처럼 보여야 JWT토큰이 발행된거에요!!


09. 메인 페이지 모습 만들기

  • CSS 파일 분리하기
    -  CSS 내용 중 다른 페이지에서도 쓸만한 것들은 static 폴더 안에 mystyle.css 파일을 만들어 옮겨주시고,
        head에는 링크를 달아주세요. 전체적으로 통일감 있는 웹사이트를 만들 수 있겠죠?
     
    myctyle.css (static파일 아래 만들기)

        Bulma의 클래스들을 커스터마이징해서 쓰기 때문에 Bulma의 링크보다 아래에 넣어주어야 함 !
  • 내비게이션 바 만들기
    - 로고를 클릭하면 메인 페이지로 갈 수 있는 내비게이션 바(=목록)를 만들어봅시다.
     index.html body태그 안에 넣어주기!
    누르면 홈으로 돌아갈 수 있다.
  • 포스팅 칸 만들기
    -
    클릭하면 글을 적을 수 있는 팝업이 뜨는 포스팅 칸

    - 앞의 이미지를 사용자의 프로필 사진으로 넣어주기 위해서는 서버에서 사용자 정보를 같이 보내주어야 함!

    - 이 정보를 이용해 이미지를 바꿔줄 수 있습니다. 이미지를 클릭하면 사용자 프로필로 가도록 링크도 바꾸어 준다.
    그림을 클릭하면 아래 내 프로필 페이지로 간다


  • 포스팅 모달 만들기
    -
    실제로 글을 적을 수 있는 포스팅 모달은 우선 모습을 만들고 숨겨놓았다가 포스팅 칸을 클릭하면 나타고,
      바깥 배경 영역이나 X표, 취소 버튼을 클릭하면 사라집니다.
      *나타나고 사라지는 것은 is-active 클래스를 이용해 제어가 가능*.
    index.html에 추가

    페이지 위로 새로운 입력창(=모달)이 뜨는 것을 볼수있다
  • 포스팅 카드 만들기
    -
    Bulma의 box와 media 클래스를 이용하면 예쁜 카드를 쉽게 만들 수 있습니다.



10. 메인 페이지 기능 만들기 - 포스팅

  • 포스팅 기능 만들기
    - 글과 현재 시각을 문자열로 받아 POST 요청을 보내고, 저장에 성공하면 모달을 닫고 새로고침해줍니다.

    - 서버에서는 글과 현재 시각을 받아 로그인한 사용자의 정보로부터 아이디, 이름, 프로필 사진을 같이 저장합니다
    robo3T에서 DB 저장되었는지 확인하기
  • 포스팅 카드 띄우는 기능 만들기
    - 포스트를 저장했으니 이번에는 받아와봅시다.
    - 서버에서는 DB에서 최근 20개의 포스트를 받아와 리스트로 넘겨줍니다. 나중에 좋아요 기능을 쓸 때 각 포스트를 구분하기 위해서 MongoDB가 자동으로 만들어주는 _id 값을 이용할 것인데요, ObjectID라는 자료형이라 문자열로 변환해주어야합니다.

    - 클라이언트에서는 각 포스트를 카드로 만들어줍니다. 기존에 있던 카드는 다 지우고 새로 만들어서 담벼락에 붙여줍니다.


    - 이 get_posts() 함수가 페이지가 로딩되었을 때, 실행되게 하면 되겠죠?
    위 화면 처럼 나오게된다. 좋아요 숫자와 위치가 적나라하게 나오는 점 주의,,

포스팅 시간 나타내기
- 이번에는 포스팅한 지 얼마나 되었는지 보여주는 기능을 만들어봅시다.
- 자바스크립트의 Date 오브젝트 간의 빼기의 결과는 밀리초로 주어집니다.


- 60분이 넘어가는 경우에는 시간으로 나타내봅시다.


- 24시간이 넘어가는 경우에는 일수로 나타내볼까요?


- 7일 이상일 때에는 날짜로 보여주도록 하겠습니다.

- 이것을 get_posts() 함수 안에 각 포스팅 카드에 포스팅 시각 대신 넣어주면 되겠죠?

위 코드, 적용 후 결과


11. 메인 페이지 기능 만들기 - 좋아요

  • 좋아요/좋아요 취소 기능 만들기
    1. 서버
      - 우선 서버 쪽 기능을 먼저 생각해봅시다. 하트를 누르면 1) 어떤 포스트를 2) 누가 눌렀고 3) 좋아요인지 좋아요 취소인지를 알아야겠죠? 숙제로 만들 다른 반응들(, 👍)을 생각하면 어느 아이콘을 눌렀는지도 알아야겠네요. 
      - DB에 저장할 때는 1) 누가 2) 어떤 포스트에 3) 어떤 반응을 남겼는지 세 정보만 넣으면 되고, 좋아요인지, 취소인지에 따라 해당 도큐먼트를 insert_one()을 할지 delete_one()을 할지 결정해주어야합니다.

      - 좋아요 컬렉션을 업데이트한 이후에는 해당 포스트에 해당 타입의 반응이 몇 개인지를 세서 보내주어야합니다.
      count = db.likes.count_documents({"post_id": post_id_receive, "type": type_receive})
      - 좋아요 업데이트 API
    2. 클라이언트
      - API에서 요구하는 데이터가 사용자 정보, 포스트 아이디, 좋아요/좋아요 취소, 아이콘 종류입니다.

      - 여기에서 하트를 누른 사람의 정보는 로그인 정보에서 받아왔으므로 나머지 3개만 데이터로 보내주면 됩니다.

      - 좋아요인지, 좋아요 취소인지는 아이콘의 클래스가 fa-heart인지 fa-heart-o인지로 알 수 있습니다.

      - 업데이트에 성공하면 아이콘의 클래스를 바꾸고 좋아요 숫자도 업데이트해줍니다.
      - 좋아요 업데이트 함수 클라이언트
      script태크 안에 최 상단에 넣어주세요
      눌러보면 숫자가 정상적으로 바뀜..
  • 좋아요 숫자 표시하기
    - 이제 좋아요 기능이 생겼으니 포스팅 카드를 만들 때도 좋아요 개수를 제대로 입력해주도록 합시다.
     > 우선 서버에서 포스트 목록을 보내줄 때 그 포스트에 달린 하트가 몇 개인지,
        내가 단 하트도 있는지 같이 세어 보내줍니다.
    > 클라이언트에서는 이 정보를 받아 찬 하트("fa-heart")를 보여줄 것인지, 빈 하트("fa-heart-o")를 보여줄 것인지
      결정합니다.
    좋아요 눌렀던 친구만 하트가 꽉 차있다
     > 이것을 '조건부 삼항 연산자(ternary operator)'를 쓰면 한 줄로 나타낼 수 있어요!
    위 else밑에 넣어주세요
     > 조건부 삼항 연산자는 다음과 같은 구조로 써주면 됩니다. [ 변수 = 조건 ? 참일 때 값 : 거짓일 때 값
     > 이 정보를 html_temp를 만들 때 하트 개수와 함께 넣어주면 끝!



    서버가 카운트 개수를 넘겨주어서 변수를 하나 설정해줌
    - 좋아요 숫자도 형식을 조금 바꿔볼까요
    1. 우선 10,000개가 넘으면 '12k'처럼 정수+k 형식으로 만들어줍니다.
    2. 500개가 넘으면 '0.5k'처럼 소숫점 아래 한 자리 수에서 반올림해줍니다.
    3. 좋아요 수가 0개일 때는 숫자를 적지 않습니다.
    4. 작은 숫자는 그대로 적습니다.
      좋아요 숫자 형식
      > num2str함수를 get posts 함수 위에 만들어준 후 get_posts()와 toggle_like() 안에 넣어줍니다.
      추가
      추가


    5. 함수를 만들어주고
  • JS 파일 분리하기
    1. 여러 페이지에 걸쳐 쓰이는 CSS 내용을 mystyle.css 파일에 적어 공유할 수 있듯, 자바스크립트 코드도 파일을 분리하여 다른 html에서 임포트해올 수 있습니다.
    2. 포스팅 관련 함수들은 프로필 페이지에서도 쓰이므로 JS 파일로 분리하여봅시다.
    3. static 폴더 안에 myjs.js 파일을 만들고 함수들을 복사해 넣습니다.
    4. HTML 안에는 아래와 같이 임포트해옵니다.
      기존 script코드 삭제하고 위 공간에 링크 추가!

      jQuery의 함수들을 사용하기 때문에 jQuery 임포트하는 코드보다 아래에 넣어주어야합니다

 


 

 

 

728x90
반응형