multer랑 프론트랑 결합하는 과정에서 질문있습니다.
560
작성한 질문수 5
안녕하세요
영상을 보다가 프론트랑 결합해서 작은 프로젝트를 만들어 보고있습니다.
multer를 적용하고 프론트와 결합하는 과정에서 이미지를 선택하면 콘솔에 지속적으로 500에러가 발생해서 찾아보고 시도했으나 방법을 찾지못해 질문드립니다.
백엔드 + 프론트 = Node - v18.7.0
프론트 주요 라이브러리 버전 = React-18.2.0, Next = 12.3.1, TypeScript = 4.8.4
백엔드의 경우 타입스크립트 미 사용중입니다.
백엔드랑 프론트는 별도의 프로젝트로 만들어서 따로 관리중이며 프론트는 리덕스나 리코일 같은 별도 상태관리 라이브러리 미사용중입니다.
백엔드 에러메시지
TypeError: Cannot read properties of undefined (reading 'filename')
at /Users/Desktop/Temp-toyProject-Backend/Routes/TempPost.js:31:39
이며 해당 부분에서 이 부분이 문제가 되는게 아닐까? 하는 부분은 다음과 같습니다.
const upload = multer({
storage: multer.diskStorage({
destination(req, file, cb) {
cb(null, 'uploads/');
},
filename(req, file, cb) { <<<< ?????
const ext = path.extname(file.originalname);
cb(null, path.basename(file.originalname, ext) + Date.now() + ext);
},
}),
limits: { fileSize: 5 * 1024 * 1024 },
});
router.post('/img', upload.single('img'), (req, res) => {
res.json({ url: `/img/${req.body.file.filename}` }); // <<< 에러가 나오는 31줄
});multer를 사용한 부분은 강사님의 영상에서 별도로 제작하신 미들웨어 등 몇가지 빼고는 그대로 가지고왔습니다.
2.백엔드와 결합되는 프론트 코드
const [content, setContent] = useState("")
const [img, setImage] = useState<File>()
const onChangeTitle = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
setContent(e.target.value)
},[])
const onChanges = useCallback((e:React.ChangeEvent<HTMLInputElement>) => {
e.preventDefault()
const formData = new FormData()
formData.append('img', img)
axios.post('http://localhost:8005/temppost/img', formData, { // <<< 백엔드 코드의 부분
headers: { 'Content-type': 'multipart/form-data' },
})
.then((res) => {
console.log(res.data)
})
.catch((error) => {
console.error(error)
})
},[img])
const onSubmit = useCallback((e:any) => {
e.preventDefault()
axios.post('http://localhost:8005/temppost', {
headers: { 'Content-type': 'multipart/form-data' },
img ,
content : content
})
.then((res) => {
console.log(res.data)
})
.catch((error) => {
console.error(error)
})
},[img,content])
return (
<form encType="multipart/form-data" > // 이미지와 content를 입력받고 보내는 부분
<input type="file" name="img" onChange={onChanges} />
<input name="content" type="text" onChange={onChangeTitle} />
<input type="submit" onClick={onSubmit}/>
</form>
)프론트쪽의 경우 다른걸 참고하긴 했는대 이미지와 관련된 state는 타입을 저렇게 <File>로 줘도 될까요?
항상 영상 잘 보고 있습니다 감사합니다..
답변 1
리눅스 노드 설치시 패키지
0
172
0
socket.js 에서 referer로부터 roomId를 가져올 때
0
930
3
스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문
0
2297
2
a[title] 질문드립니다
0
387
1
리뉴얼 강의 및 공부 방법
0
590
1
jwt decode
0
1138
1
node.js 교과서 3판 질문드립니다
0
397
1
passport와 jwt
0
439
1
리뉴얼 강의
0
428
2
혹시 Node.js 교과서 3판 이북은 언제 나오나요?
0
359
1
몽고디비 사용자도 MYSQL부분을 들어야 하나요???
0
490
1
sql 쿼리 로그는 어떤 모듈이 작성하나요?
0
511
2
nunjucks res.render('error'); 작동을 안합니다.
0
520
1
질문있습니다.
0
348
1
multer 한글 파일 업로드시 파일명이 깨져요.
1
3545
1
수업자료는 어디있나요?
0
374
1
질문 있습니디
0
245
1
multer 사용시 file 외 name값은 못받나용?
0
430
1
코드 중복 부분 질문드립니다.
0
303
1
api 만드는 이유 질문드립니다.
0
293
1
Strategy의 done에 대해 질문드립니다.
0
374
1
안녕하세요 fs 권한 관련 질문드립니다
0
456
1
시퀄라이즈 연결질문...
0
511
2
res.setHeader vs res.cookie
0
1798
3





