일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- c++
- WebGL
- 주일설교
- Deep learning
- Big Data
- 몽고디비
- 인공지능
- 김양재
- Artificial Intelligence
- Machine Learning
- 김양재 목사
- node.js
- 김양재 목사님
- 우리들교회
- 확률
- MongoDB
- 통계
- 딥러닝
- 빅데이터
- 빅 데이터
- 빅데이타
- 빅 데이타
- No SQL
- Statistics
- data science
- 데이터 과학
- R
- openCV
- nodeJS
- probability
- Today
- Total
Scientific Computing & Data Science
[WebApp / Express] HTTP POST 방식을 통한 Form 데이터 전송 본문
이번 글에서는 HTTP POST 방식을 이용하여 Form 데이터 전송을 하는 방법에 대하여 알아보기로 하겠습니다.
특히 Express 3.x에서 Express 4.x으로 버전업 되면서 파일 업로드 방식이 조금 더 어려워졌습니다.
Express 4.x은 Connect 모듈 dependency가 더이상 지원되지 않으며 Connect 모듈의 multipart() 미들웨어가 사라졌습니다. 그러나 다른 미들웨어들은 개별적인 모듈로 설치가 가능해졌습니다.
Express 4.x에서의 파일 업로드 방법에 대해서도 알아보기로 하겠습니다.
multer 미들웨어 설치
Express 4.x에서 파일 업로드를 위해 multer 미들웨어 설치는 필수입니다. Terminal에서 다음 명령을 입력하여 multer 미들웨어를 설치합니다.
또는 package.json에 dependencies를 정의하고 Terminal에서 $ sudo npm install 명령을 무방합니다.
package.json 예
signup.jade 파일 정의
설명을 위하여 Express의 view template을 jade로 정하였습니다. 물론 ejs나 hogan 템플릿 등 어느 view template을 정하여도 무방합니다.
{EXPRESS_APP_ROOT}/views/signup.jade
위와 같이 정의할 경우 다음과 같이 화면이 구성될 것입니다.
form 속성을 살펴보도록 하겠습니다.
form(action='/signup', method='post', enctype='multipart/form-data')
action은 submit을 할 때 일으킬 URL 경로이며, method는 HTTP 방식을 의미하는데 POST 방식으로 데이터를 전송하는 것을 의미합니다.
enctype을 multipart/form-data로 정의하는 것은 파일 업로드에 필수 사항입니다.
input(type='file', name='profile_image', accept="image/*")
위는 input 속성을 정의한 것인데, type을 file로 정의하고, accept는 image 파일 필터링을 의미합니다.
특히, name은 데이터 전송 시 JavaScript에서 처리할 수 있도록 데이터를 바인딩하는 역할을 합니다.
profile_image로 정의된 것을 기억하기 바랍니다.
app.js 코드 추가
app.js에 추가할 코드는 비교적 간단하다. Router 정의가 전부입니다. 추가된 코드를 빨간색으로 표시하였습니다.
{EXPRESS_APP_ROOT}/app.js
전체적인 이해를 돕기 위하여 app.js 예를 아래와 같이 삽입하였습니다.
app.js 예
JavaScript 파일 정의
다음의 경로 JavaScript 파일을 정의합니다.
{EXPRESS_APP_ROOT}/routes/signup.js
코드를 살펴보겠습니다.
위의 코드는 multer 미들웨어를 로딩한 것입니다.
위의 코드는 multer에 대한 환경설정을 multer_settings라는 변수에 저장한 것입니다.
업로드 되는 파일이 저장되는 경로를 {EXPRESS_APP_ROOT}/public/uploads/ 설정하였습니다.
파일의 size 제한, 경로, encoding 등 다양한 설정이 가능하며, multer Github 페이지에서 자세한 내용을 확인할 수 있습니다.
위의 코드는 파일 업로드의 해당 input에 대한 데이터 바인딩을 하고 console에 정보를 표시하도록 합니다.
profile.jade 파일 정의
name, email을 입력하고 profile image를 업로드한 후 [submit] 버튼을 클릭하면, 입력된 정보가 표시되는 Profile 페이지를 만들어 보겠습니다.
{EXPRESS_APP_ROOT}/views/profile.jade
Result
이제 Terminal에서 node app.js 명령을 입력하여 서버를 실행합니다.
웹 브라우저에서 해당 URL을 입력하고, 정보를 입력하였습니다.
[Submit] 버튼을 클릭한 후, Terminal에 기록된 정보를 살펴보도록 합니다.
Form의 데이터 필드 및 업로드 된 파일에 대한 정보를 볼 수 있습니다.
해당 경로에 파일이 업로드 되었는지 확인해 보도록 합니다.
만약 본 튜토리얼에서 설정된 파일 업로드 경로와 동일하다면, {EXPRESS_APP_ROOT}/public/uploads/ 경로에 파일이 존재해야 합니다.
유의할 것은, 파일명일 굉장히 길고 암호같은 이름으로 변경되어 있는 것을 확인할 수 있을 것입니다.
이는, 여러 곳에서 동일한 이름의 파일이 업로드 되는 경우 중복 방지를 위한 것이며, multer가 제공하는 rename 명령을 통해 이름 및 경로 변경이 가능합니다.
표시되는 profile 페이지의 예는 다음과 같습니다.
이로써 Express 4.x에서 HTTP POST 방식으로 데이터와 파일을 전송하는 방법에 대하여 알아보았습니다.
'Programming > Web App' 카테고리의 다른 글
[Web App / Express] Express에서 서버 열기 (0) | 2015.12.13 |
---|---|
[WebApp / CreateJS] 간단한 오브젝트 생성 + 터치 무브 + 사운드 재생 (0) | 2015.12.09 |
[WebApp / Express] HTTP GET 방식을 통한 Form 데이터 전송 (0) | 2015.12.03 |
[WebApp / Express] ini Parser (0) | 2015.11.12 |
[Web App / Express] Node.js (Express Framework) 앞단에 Nginx 사용하기 (0) | 2015.11.07 |