react & node.js 개발 - mysql에 배열 데이터 저장하기

여러가지 방법이 있는 것 같은데 성능적으로는 배열 자료형을 문자열로 바꿔서 문자열로 저장하는 방법이 좋은 것 같다

 

배열이나 객체를 문자열로 바꾸는 방법은 JSON.stringify()

 

그리고 이렇게 바뀐 문자열을 다시 배열이나 객체로 바꿀려면 JSON.parse()하면 된다

 

다음과 같이 객체 optionData를 JSON.stringify()로 문자열로 바꿔서 서버에 보내준다

 

var optionData = {
  title: title,
  description: description,
  data: data.map(x => {
    return {
      optionTitle: x.optionTitle,
      targetUploadType: x.targetUploadType,
      uploadTargetPath:
        x.targetUploadType !== 'image'
          ? x.uploadTarget
          : x.uploadTarget.path,
    };
  }),
  isMultipleChoice,
  category,
  isPowerVoteChoice,
  thumbnailImage: thumbnailImageData.file.path,
  end_dt: endDt,
  user_id: user_id
};

formData.append('optionData', JSON.stringify(optionData));

 

객체처럼 보이지만 console.log(typeof req.body.optionData)로 찍어보면 string으로 나온다

 

 

물론 clinet에서 optionData는 object로 찍힌다.

 

 

아무튼 이렇게 string으로 받은 객체를 object로 활용할려면 JSON.parse()로 다시 object로 바꾼다음에 사용한다

 

이제 object로 바꾸고

 

{"title":"윤아","description":"윤아에요","data":[{"optionTitle":"윤아","targetUploadType":"image","uploadTargetPath":"300400.jpg"},{"optionTitle":"윤아임","targetUploadType":"image","uploadTargetPath":"spring.jpg"}],"isMultipleChoice":false,"category":4,"isPowerVoteChoice":false,"thumbnailImage":"spring.jpg","end_dt":0,"user_id":"1"}

 

를 DB에 저장할려고 한다.

 

각각 속성을 뽑아서 DB에 저장하면 되겠지만..

 

"data":[{"optionTitle":"윤아","targetUploadType":"image","uploadTargetPath":"300400.jpg"},{"optionTitle":"윤아임","targetUploadType":"image","uploadTargetPath":"spring.jpg"}]

 

이 부분이 배열로 되어 있는데 이걸 MySQL에 저장하고 싶다

 

그러면 역시 JSON.stringify()로 바꿔서 DB에 저장하면 되겠다.

 

const upload_vote = multer({storage:storage}).array('files'); //single: to use single file upload, array: to use multiple file upload

app.post('/api/vote', upload_vote, (req,res) => {


    const req_data = JSON.parse(req.body.optionData)

    Vote.create({
        title: req_data.title,
        description: req_data.description,
        options: JSON.stringify(req_data.data),
        isMultipleChoice: req_data.isMultipleChoice,
        category: req_data.category,
        thumbnailImageUrl: `http://localhost:${PORT}/images/${req.files[0].filename}`,
        end_date: req_data.end_dt,
        user_id: Number(req_data.user_id)
    })
    .then(result => {
        res.send({
            message:"success"
        })
    })
    .catch(e => {
        console.log(e)
        throw e;
    })
})

 

물론 DB에서 빼서 활용할려면?

 

JSON.parse()로 배열로 바꿔서 활용하면 되겠다

 

[MYSQL] 📚 RDB에 배열을 저장하는 방법 (tistory.com)

 

[MYSQL] 📚 RDB에 배열을 저장하는 방법

MySQL에 배열 데이터를 저장 게시판을 제작하는데 있어, 게시글의 내용을 서버에 다음과 같이 보낸다고 가정해보자. 게시글 제목(title)과 게시글 제목(description) 그리고 게시글에 사용된 이미지(thu

inpa.tistory.com

 

TAGS.

Comments