node.js에서 form 값 확인

기본적으로 node.js에서는 form을 통해 전송되는 값을 쉽게 확인할 수 있다.

//app.js에서

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

위와 같이 작성되어 있다면 req.body에 form에서 전송된 값을 볼 수 있다.

multer 사용 시 주의할 점

multer의 설명은 아래와 같다.

Multer는 파일 업로드를 위해 사용되는 multipart/form-data 를 다루기 위한 node.js 의 미들웨어 입니다. 효율성을 최대화 하기 위해 busboy 를 기반으로 하고 있습니다.

즉 node.js에서 이미지나 동영상 같은 파일을 올릴 때 multer를 사용하게 된다. 하지만 이 때 form의 enctype을 multipart/form-data으로 반드시 지정해야 한다. 그리고 파일은 req.file을 통해서 받고, 나머지 form의 값은 req.body를 통해서 받게되는 형태를 취한다.

파일을 올리지 않지만 multipart/form-data로 지정되어 있을 경우

제목처럼 파일을 올리지도 않는데 form의 enctype이 multipart/form-data로 지정되어 있다면 어떻게 될까?
바로 form을 통해 값을 전달한 후 req.body를 확인해보면 undefined가 된 것을 확인할 수 있다.
그래서 multer를 사용하지 않는 경우엔 꼭 지우자.

enctype의 차이

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이어야 한다는 것.