한달도 전에 흘낏 넘어간 Array.map() , 이렇게 다시쓰게 될 줄은 몰랐다.
Array.map() 은 [ Array 안에 담긴 값들을, 다시 재정리하여 돌려받게 해준다]
data = [ 2,3,4]
data.map(function( element){
return element*3 })
마치 FOR문처럼, data 안의 값
2 에대하여 *3,
3에대하여 *3,
4에 대하여 *3을 한 후, 다시 data 에 집어넣어준다.
console.log( data)
==> [ 6, 9, 12]
이번에 사용하게 되면서 다시 찾은 계기는 [사용자로부터, DB에 정확한 값을 숨기기 위해서다]
Array.map() 은 값을 재정립하는데 목표가 있다.
일반적으로, [ 서버측에서, db에 저장할때 ], [MODEL 안의 사용자함수 에서 저장하게 된다.]

만약 Product에 모든 값을 [ 데이터베이스에 넣게된다면] , 혹시 모를 사용자가 접근하여 데이터를 빼 갈 수 있을 뿐더러,
Ajax 요청등의 스크립트 요청으로 [해킹의 위험도 있을 수 있게 된다]
사전에 위험요소를 차단하는 의미에서,
1. path의 직접적인 경로를 데이터베이스에 저장하는 것을 피하고,
2. imageURL 을 사용하여, 직접 저장된 파일의 경로와, 이미지를 불러오는 경로가 같지 않게 만든다.
그렇다면, 데이터베이스에 직접 저장하지 않고 어떻게 VIEW로 값을 보낼것인가?
정답은 Array.map() 에 있다.

MODEL의 FIND() 로 DB에서 값을 불러온다.
값을 불러오게되면, 저장된 DB의 키들은 name~ image 까지 존재할것이다.
지금 이미지파일들을 불러오기 위해, 필요한 것은 src 로 사용할, imageURL 이다.
DB와 달리, CONSTRUCTOR 에는 , imageURL 이 저장되므로,
DB에서 불러온 값들 (배열 안에 담긴 객체들, imagePath와 imageURL이 없는) 을 재정립하여,
DB에서는 저장되지 않았던 값들을, VIEW로 보낼것이다.
그래서 받은 데이터를 재정립하는 코드가
function안의 data 파라미터를 넣고(아무이름이나 괜찮다), 재정립한다.
data는
[ { name : ... , price : ..., ... , image : ... }
{ name : ... , price : ..., ... , image : ... }
{ name : ... , price : ..., ... , image : ... }
... ]
형태로 저장되어 있을것이다.
그러므로, map() 을 사용하면,
배열의 첫번째 객체에 관하여, Product 객체의 constructor에 전부 들어가서 한 값으로,
배열의 두번째 객체에 관하여, Product 객체의 constructor에 전부 들어가서 한 값으로,
....
요컨데
[ Product(name value, price value,...image value, id value) , Product(name value, price value,...image value, id value ), Product(name value, price value,...image value, id value ) ... ]
즉, 변수 안에는
[모든 배열안의 객체에 관하여, Product 안에서 재정립된 ], imagePath 와 imageURL, id 까지 전부 저장될것이다.
이로써, DB를 들여보거나, 어떠한 변수가 발생하더라도,
사용자로부터 숨겨진 PATH 데이터를 VIEW로 전송할 수 있게된다.
'공부이야기' 카테고리의 다른 글
[정보처리기사] 합격기념 공부자료 뿌리기 (2024.03) (0) | 2024.06.18 |
---|---|
4. 검색 기능을 만들어보자! 배열, 객체 조작하기 [splice(), filter(), indexOf() ] (0) | 2022.10.05 |
2. insertOne() 은 항상 promise를 생성한다! (0) | 2022.09.20 |
1. 인스턴스화... 대체 넌 누구냐 (0) | 2022.09.15 |
댓글