본문 바로가기
  • 삽질하는 자의 블로그
공부이야기

3. Array.map() 에 관하여, (사용자로부터 DB의 값을 숨기는 방법)

by 이게뭐당가 2022. 9. 23.

한달도 전에 흘낏 넘어간 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로 보낼것이다.

 

그래서 받은 데이터를 재정립하는 코드가

        return data.map( function ( data ) {
            return new Product ( data.name,
                data.price,
                data.summary,
                data.detail,
                data.warning,
                data.image,
                data._id)
        })

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로 전송할 수 있게된다.

 

댓글