DEFAULT: npm install multer && path
사용할 router에 선언을 해주고 multer를 사용하는 function을 만들어준다.
넣어줄 function은 그냥 외우는게 좋을듯
크게 이해하자면 이미지는 text형식으로 저장해서 움직이는 거.
const upload = multer({
storage: multer.diskStorage({
destination:function(req,file,callback){
callback(null,'uploads/') // uploads => 폴더명
},
filename:function(req,file,callback){
callback(null,new Date().valueOf() + path.extname(file.originalname))
}
}),
});
이런내용으로 만들어진 function을 결과값을 처리해주는 URL에 두번째 인자값(midwear)으로 넣는다.
[function명].single('[input name]')
router.post('/join_success',upload.single('img'),controller.join_success);
이렇게 하고 이미지파일을 넣으면 uploads라는 파일에 이미지가 업로드됨.
이렇게 이미지가 저장되면 이미지가 TEXT로 변경되서 저장이 되는건데 이상태 그대로 DB에 저장을 하면 TEXT 길이가 너무 길어서 과부화가 걸릴 수 있음.
그래서 DB에는 파일 경로만 저장한다.
파일경로 가지고 오는 법
let join_success = async (req, res) => {
let userid = req.body.userid;
let userpw = req.body.userpw;
let username = req.body.username;
let gender = req.body.gender;
let userimage = req.file.path; //req.file => 객체
try {
let results = await User.create({ userid, userpw, username, gender,userimage})
} catch(e){
console.log(e);
}
res.render('./user/join_success.html',{ userid, username,});
}
여기서 req.file은 객체다. 이 객체에서 아까전에 위에서 미리 설정해둔 path를 가지고 오고 그 path 를 userimage변수에 담아 DataBase로 보내준다.
성공하면
이렇게 db에 경로로써 저장이 된다.
문제점
그런데 이렇게 설정을 해놓으면 이미지를 안 넣고 회원가입을 했을때 path값이 없으므로 오류가 생긴다
이걸 해결하기 위해서 userimage를 변수로 설정해 줄때 if문으로 구분값을 넣어서 설정해준다.
let userimage = req.file == undefined ? '' : req.file.path
이러면 image를 안넣었을때는 저절로 값이 req.file로 되면서 path값이 필요가 없게되서 오류가 안생기고 빈값으로 저장됨
'Lecture' 카테고리의 다른 글
회원가입 ID확인 (AJAX) (0) | 2021.05.11 |
---|---|
회원가입 password 재확인 (0) | 2021.05.11 |
API사용 SERVER연결 (2) | 2021.05.10 |
0422 (0) | 2021.04.22 |
MariaDB Mysql table 생성 (0) | 2021.04.22 |