전반적인 상황으로 저번 한주동안 각자 맡은 역할이 거의 끝나가는거 같아
오늘은 서버와 클라이언트의 코드병합을 진행해야 오류컨트롤을 할수 있을것 같아 그렇게 진행했더니
많은 에러가 발생했고 또한 많은 에러를 해결할수 있었다.
그래서 오늘 고생은 많이 했지만 클라이언트와 서버의 모든 코드들을 합칠수 있었고,
그 덕에 목표로 했던 bareminimum 의 조건을 충족하는 프로젝트가 완성되었다.
그래서 생각해본 결과 카메라를 끄면 되겠다! 싶어서 티처러블머신 코드를 자세히 살펴보니
let webcam
webcam.setup()
webcam.play() //자세한 내용은 생략
뭐 이런게 있길래 play()는 또 뭐지..?검색해보니
HTMLMediaElement.play()이라는 HTML 내장메소드 같아 stop()있겠거니 하고 찾아서 적용시키려고 했지만 쉽지 않았고, 계속 풀리지 않아 일단 구현부터 해놓자 하여
두번째로 시도 했던 방법은
카메라가 안꺼지니 버튼태그를 이용해서 버튼이 클릭되면
카운트갯수를 fetch 로 server로 보내서 서버를 통해 DB에 저장시켜놓고
history.push를 사용해서 /result로 가고, 페이지가 바뀌게 되면
unmount되면서
밑의 함수가 실행되면서 새로고침되는 방식이며
componentWillUnmount(e) {
console.log("ing.js is unmounted")
window.location.reload()
}
이렇게 되면 /ing 페이지의 state가 초기화되면서 사실상 /result에 props로 전달되는 값이 없게되므로 다시
componentDidMount 함수를 통해 마운트가 되면 fetch로 아까 서버를 통해 DB로 저장시켜놓은
스쿼트 갯수를 다시 불러오는 방식으로 진행했건만..(어쨌든 작동은 잘 되었다...불필요한 fetch 2번만 아니라면..ㅎ)
그렇게 한참 고생해서 완성하였는데..!
다른 팀원이 결국 처음시도한 방법을 해결해서 결국 최종코드는
<button className="button" onClick={async (e) => {
e.preventDefault()
await this.handleWebCam();
this.props.handleCounting(count)
fetch('http://localhost:4000/count/saveCount', {
method: 'POST',
body: JSON.stringify({
categoryId: "1",
count: count
}),
headers: {
'Content-Type': 'application/json',
'accessToken': JSON.stringify(localStorage.getItem('dailySquatToken')),
}})
this.props.history.push('/Result')
}}>완료</button>
이런 코드가 되었다!
시도해본 모든것을 쓰자면 아마 오늘안에 다 작성 못할것 같아서
시도했던 것들중 의미있는 것들만 적어보았다.
##비동기로 루프하는 함수코드가 있는경우 실행순서를 잘 살펴봐야겠다.##