본문 바로가기

프로젝트/Spring Framework Project

팀게시판 새글 작성에 TOAST UI Editor 적용 - 취소

register.jsp
0.00MB

수정 전 register 첨부

기존에 form태그로만 이루어진 단순한 형태를 개선하고자 web editor를 알아보던 중 좋은 형태를 발견했다.

 

https://congsong.tistory.com/67

 

[TOAST UI Editor] - 5분 안에 게시판에 토스트 UI 에디터 적용하기

1. TOAST UI Editor란? TOAST UI Editor(이하 'TUI 에디터')는 NHN Cloud에서 개발한 오픈 소스 라이브러리로, 마크다운과 위지윅 방식 모두를 지원하는 무료 에디터입니다. 마크다운(Markdown) : '일반 텍스트 기

congsong.tistory.com

 

  const editor = new toastui.Editor({  
        el: document.querySelector('#editor'),  
        previewStyle: 'vertical',  
        height: '500px',  
        initialEditType : 'wysiwyg',  
        initialValue: 'content',  
        hideModeSwitch: 'true'  
      });  

markdown형식은 숨기고 표시하도록 설정했다.

작성 후

editor.getHTML();

을 이용해서 HTML로 editor content를 얻을 수 있다.

 

나는 기존에 form형식으로 게시글 작성 화면을 만들어놓았는데,

form태그를 사용하여 AJAX처리를 할 수 있다는 것을 알게되었다.

그리고 AJAX에서 그걸 formData 타입으로 받는다니!!!

 

우선 String type변수에 HTML을 문자열로 저장한다.

-> Fetch API를 사용한다.

// HTML 문서를 가져와서 문자열로 저장하는 예시
fetch('URL_또는_경로')
  .then(response => response.text())
  .then(htmlString => {
    // htmlString 변수에 HTML 문서가 문자열로 저장됨
    console.log(htmlString);
  })
  .catch(error => {
    console.error('Error fetching HTML:', error);
  });

form태그를 사용하여 AJAX 처리시 submit 이벤트를 무효화한다.

form 태그에 id값을 부여하고

$("#id").addEventListener("submit",function(){

이벤트 무효화.

그리고 const formData = new FormData(event.target);

AJAX에 요청 보내기

)

<script>
document.getElementById("myForm").addEventListener("submit", function(event) {
  event.preventDefault(); // 기본 폼 제출 동작을 막음

  // FormData 객체를 사용하여 폼 데이터 수집
  const formData = new FormData(event.target);

  // AJAX 요청 보내기
  fetch("서버_URL", {
    method: "POST",
    body: formData
  })
  .then(response => response.text())
  .then(data => {
    // 서버로부터 받은 응답을 처리
    document.getElementById("result").textContent = data;
  })
  .catch(error => {
    console.error("Error:", error);
  });
});
</script>

</body>
</html>

Fetch API에 대해서 알아보자 (jQuery 를 대체할 수 있다. 번들파일 크기 줄일 수 있음)

: REST API를 호출할 때 사용되는 브라우저 내장함수이다. 

API의 URL을 인자로 받고, 미래시점에 얻게될 API 호출 결과를 Promise 객체로 리턴한다.

디폴트는 GET 방식. 응답객체는 json()메서드를 제공함.

response.json() : response 객체로부터 JSON 포맷의 응답 전문을 자바스트립트 객체로 받는다.

 

 

Promise에 대해서 알아보자

Promise : 현재에는 당장 얻을 수는 없지만 가까운 미래에는 얻을 수 있는 어떤 데이터에 접근하기 위한 방법을 제공합니다. 당장 원하는 데이터를 얻을 수 없다는 것은 데이터를 얻는데까지 지연 시간(delay, latency)이 발생하는 경우를 말합니다

findUser(1).then(function (user) {
  console.log("user:", user);
});

function findUser(id) {
  return new Promise(function (resolve) {
    setTimeout(function () {
      console.log("waited 0.1 sec.");
      const user = {
        id: id,
        name: "User" + id,
        email: id + "@test.com",
      };
      resolve(user);
    }, 100);
  });
}

결과값  :

waited 0.1 sec.
user: {id: 1, name: "User1", email: "1@test.com"}

 

콜백함수와의 차이점은 함수를 호출하면 Promise 타입의 결과값이 리턴되고, 이를 가지고 다음에 수행할 작업을 진행함.

 

Promise는 resolve, reject 2개의 함수형 파라미터를 받는다.

 

function returnPromise() {
  return new Promise((resolve, reject) => { ... } );
}

resolve()함수의 인자로는 미래 시점에 얻게될 결과를 넘긴다.

reject()함수의 인자로는 미래시점에 발생할 예외를 넘긴다.

 

정상적인 인자를 넘긴 경우 then() 메서드 호출(결과값을 가지고 수행할 로직을 담은 콜백함수)(중첩사용가)

/ 비정상적인 인자를 넘긴경우 catch()메서드가 호출됨. (예외처리로직)

try-catch와 비슷함!

 

할일 1. 이미지 업로드 처리

  1. https://congsong.tistory.com/67

https://velog.io/@io_/Toast-UI-Editor-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%97%85%EB%A1%9C%EB%93%9C

참고하기

 

https://www.daleseo.com/js-async-promise/

promise 관련 참고글

 

https://www.daleseo.com/js-window-fetch/

 

자바스크립트의 fetch() 함수로 원격 API 호출하기

Engineering Blog by Dale Seo

www.daleseo.com

 

'프로젝트 > Spring Framework Project' 카테고리의 다른 글

헤더 디자인  (0) 2023.08.22
8.18 할일  (0) 2023.08.18
친구페이지  (0) 2023.08.14
팀별 게시판 구축  (1) 2023.08.13
파티 수정 시 file upload 구현  (0) 2023.08.12