여러가지 방법이 있는 것 같은데 성능적으로는 배열 자료형을 문자열로 바꿔서 문자열로 저장하는 방법이 좋은 것 같다
배열이나 객체를 문자열로 바꾸는 방법은 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
'프로그래밍 > node.js' 카테고리의 다른 글
react & node.js 개발 -get요청으로 서버에 데이터 보내는 방법 (0) | 2023.01.31 |
---|---|
react & node.js 개발 -static 이용해서 클라이언트에서 서버의 이미지 파일 접근하기- (0) | 2023.01.25 |
react&node.js 개발 -python-shell이용해서 서버에서 python 프로그램 실행시키기- (0) | 2023.01.24 |
react&node.js 개발 -image 데이터 서버에 저장하는 방법 배우기 (0) | 2023.01.22 |
react&node.js 개발 - 로그인하면서 JWT 토큰 발급받고 유저 정보 알아내기 (0) | 2023.01.22 |