어제 업로드한 이미지를 끝냈고 오늘은 수정과 삭제기능을 구현했다.
유저 정보를 프론트에 보내고 프론트에서 나타내주고
// 프로필 수정 정보 불러오기
router.get('/', (req, res) => {
const { userId } = res.locals
User.findById( userId ).exec()
.then((user) => {
res.json({ user })
})
});
S3에서 업로드된 파일을 삭제할려면 S3.deleteObject를 쓰면 된다. key는 어제 이미지 업로드를 할때같이 넣어뒀기 때문에 해당 유저아이디의 정보를 불러와서 profileImageKey를 넣어주면 삭제된다. 그리고 수정할 이미지로 갈아끼워주면 수정이 된다.
// 프로필 수정
router.put("/", upload.single("image"), async (req, res) => {
try{
const { userId } = res.locals
const { nickname, password } = req.body;
if (!req.file) { // 수정할 이미지가 없으면 나머지만 업데이트
await User.findByIdAndUpdate( userId, {$set: {
nickname : nickname,
password : password,
}}).exec()
} else {
userInfo = await User.findOne({ _id: userId });
const key = userInfo["profileImageKey"]; //이미지 키값을 가지고와서
S3.deleteObject({ //이미지 삭제
Bucket: '',
Key: key
}, (err, data) => {
if (err) { throw err; }
})
const newprofileImage = req.file.location; //새로운 정보 업데이트
const newprofileImageKey = req.file.key;
await User.findByIdAndUpdate( userId, {$set: {
nickname : newnickname,
password : newpassword,
profileImage : newprofileImage,
profileImageKey : newprofileImageKey,
}}).exec()
res.status(200).send({ message: "수정이 완료되었습니다." })
// 수정완료후 토큰 재발급 or 토큰제거후 로그인화면 리다이렉트후 다시 로그인
}}catch(err){
console.log(err)
res.status(400).send({
errorMessage: "수정 양식이 올바르지 않습니다."
})
}
});