티스토리 뷰

반응형

17. 17. 프론트엔드 ~18. 18. 가게 수정

html, 

css, 

javascript

 

 

nodejs -> serverside javascript, 범용 자바스크립트 런타임 활용 예정

특히 webpack 이라는 강력한 도구를 사용할 예정이다.

주의할점: CORS(Cross- origin  resource sharing)

-> 스프링에서 @CrossOrigin 이라는 어노테이션을 활용한다.

 

  • node js 깔기
  • eatgo-web 디렉토리 생성
  • 디렉토리로 들어가 npm init
{
  "name": "eatgo-web",
  "version": "1.0.0",
  "description": "eat-go web project",
  "main": "src/index.js",
  "scripts": {
    "test": "jest"
  },
  "author": "KJin",
  "license": "ISC"
}
  • webpack dev server 사용 예정 -> 아주 빠르게 개발용 서버를 띄울 수 있다.
    • 설치   --save-dev( 개발용에만 저장)
      • npm install --save-dev webpack webpack-cli webpack-dev-server
{
  "name": "eatgo-web",
  "version": "1.0.0",
  "description": "eat-go web project",
  "main": "src/index.js",
  "scripts": {
    "start": "webpack-dev-server  --port 3000",
    "test": "jest"
  },
  "author": "KJin",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^4.44.2",
    "webpack-cli": "^3.3.12",
    "webpack-dev-server": "^3.11.0"
  }
}

npm start

주의해서 봐야하는 부분, start 부분을 반금 만든 것이다. 포트번호를 지정하고 , src/index.js 를 만들어야 서버가 구동한다.

 


fetch 를 이용해서 request 요청을 할 수 있다.

fetch("http://localhost:8080/restaurants")

-> error :: cors 위협을 해소하자.

 


//urls.py
@CrossOrigin // cors 응답을 막지 않는다.
@RestController
public class RestaurantController {

 

//자바스크립트에서 비동기 처리할때 promise 를 처리한다. 그 내용물을 보고 싶으면
fetch('http:127.0.0.1:8000/restaurants').then(console.log)
fetch('http:127.0.0.1:8000/restaurants').then(r=>r.json()).then(console.log) //json으로 파싱해 보겠다.

dev server 는 내가 main 이라고 지정한 경로의 파일을 main.js 로 인식하게 도와준다.

<!doctype html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>EatGo</title>
</head>
<body>
<p>Hello World</p>
<script src="./main.js"></script>
</body>
</html>
//src/index.js
console.log('샛별을 쫒는 헤파이토스')
//src/index.js
//console.log('샛별을 쫒는 헤파이토스')
(async () => {
    const url = "http:localhost:8080/restaurants"
    const response = await fetch(url);
    const restaurants= await response.json();
    
    const element  = document.getElementById('app');
    element.innerHTML= `//여러개 다 잘 들어가게
    
    ${restaurants.map(restaurant =>`
    
    <p>
      ${restaurants[0].id}
      ${restaurants[0].name}
     ${restaurants[0].address}
     </p>
    `).join('')}
    `;
   // JSON.stringfy(restaurants)// 화면에 출력해라.

})();

이러면 되는 것으로 나온다.


update(patch) -> 성공시 200

데이터를 고치기만해도 디비에 반영되는 어노테이션 -> @Transactional

 

controller test

@Test
public void update() throw Exception{
	mvc.perform(patch("/restaurants/1004")
    .contentType(MediaType.APPLICATION_JSON)
    .content("{\"name\":\"JOKER BAR\",\"address\":\"Busan\"}"))
    .andExpect(status().isOk());
    
    
    
    
    verify(restaurantService).updateRestaurant(1004L, "JOCKER BAR","BUSAN");
}

* controller

@PatchMapping("/restaurants/{id}")
public String update(@PathVariable("id") Long id, @RequestBody Restaurant  resource){

    String name = resource.getName();
    String address = resource.getAddress();
    restaurantService.updateRestaurant(id, name, address);

	return "{}";
}

* Service Test

@Test
public void updateRestaurant(){

	Restaurant restaurant = new Restaurant(1004L,"밥집","서울");
	Restaurant updated= restaurantService.updateRestaurant(1004L,"술집","부산");

	assserThat(update.getName(),is("술집"));


}

-> 찾아서 얻어졌고, 바뀌었다.

 

 

// Service
@Transactional // save 안써도 여기서 일어난  데이터의 변경이 디비에 반영되게 돕는다.
public Restaurant updateRestaurant(Long id, String name, String address){

	Restaurant restaurant = restaurantRepository.findById(id).orElse(null);
    restaurant.updateInformation(name, address);
    return restaurant;

}

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

바 인강이 듣고 싶다면 =>https://bit.ly/3ilMbIO

 

 

 

 

 

 

 

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함