기본적으로 node.js에서는 form을 통해 전송되는 값을 쉽게 확인할 수 있다.
//app.js에서
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
위와 같이 작성되어 있다면 req.body에 form에서 전송된 값을 볼 수 있다.
multer의 설명은 아래와 같다.
Multer는 파일 업로드를 위해 사용되는 multipart/form-data 를 다루기 위한 node.js 의 미들웨어 입니다. 효율성을 최대화 하기 위해 busboy 를 기반으로 하고 있습니다.
즉 node.js에서 이미지나 동영상 같은 파일을 올릴 때 multer를 사용하게 된다. 하지만 이 때 form의 enctype을 multipart/form-data으로 반드시 지정해야 한다. 그리고 파일은 req.file을 통해서 받고, 나머지 form의 값은 req.body를 통해서 받게되는 형태를 취한다.
제목처럼 파일을 올리지도 않는데 form의 enctype이 multipart/form-data로 지정되어 있다면 어떻게 될까?
바로 form을 통해 값을 전달한 후 req.body를 확인해보면 undefined가 된 것을 확인할 수 있다.
그래서 multer를 사용하지 않는 경우엔 꼭 지우자.
method가 post일 때 인코딩의 차이를 잠깐 보자면 application/x-www-form-urlencoded와 multipart/form-data, text/plain 등이 있다.
application/x-www-form-urlencoded은 기본값이고 모든 문자들을 서버로 보내기 전에 인코딩 됨을 명시한다. multipart/form-data은 모든 문자를 인코딩하지 않고, text/plain은 공백은 "+"로 변환하지만 나머지 문자는 인코딩 되지 않음을 명시하는 것이다.
즉 req.body를 통해 값을 확인하려면 enctype이 application/x-www-form-urlencoded이어야 한다는 것.