미들웨어 함수? 클라이언트의 Request를 Response로 반환하기까지 중간에 거치는 모든 함수
모듈과 미들웨어
미들웨어: 요청과 응답 사이에서 중간처리를 하는 모든 함수들
모듈: 이러한 함수들의 묶음
내장 모듈: Node.js에서 기본적으로 지원하는 모듈들
확장 모듈: Node.js 사용자들이 필요에 의해 만들어낸 오픈소스 기반의 모듈들
static 미들웨어
웹 페이지에서 변경되지 않는 요소(이미지, JS 파일, CSS 파일 등)를 제공하는 기능
자주 사용되므로 express에서 직접 제공
정적 파일을 제공할 폴더를 지정: app.use(express.static(‘폴더명’));
static 미들웨어 예)
public 폴더를 만들고
public 폴더에 hello.html, audio.mp3 파일 넣음
public/image 폴더에 image.png 파일 넣음
const express = require("express");const app = express();//기본 url 뒤에 public 폴더의 위치에 바로 접근 가능//public 폴더에 hello.html이 있으면 localhost:52273/hello.html 로 접근하면 바로 띄워줌app.use(express.static("public"));app.get("*", (request, response) => { response.status(404); //경로가 없기 때문에 static한 요소가 지정되지 않아 출력 response.send("해당 경로에는 아무것도 없습니다.");});app.listen(52273, () => { console.log("Server running at http://localhost:52273");});
클라이언트가 서버로 데이터 전송 방법
GET 방식
URL을 통해 데이터를 전달하는 방식
URL 토큰과 URL 요청 매개 변수로 전달
주소에 데이터가 공개된느 문제가 있음
POST 방식
요청 본문으로 데이터를 전달
요청 본문
클라이언트가 서버로 본문을 전달할 때 요청 본문의 종류를 MIME 형식으로 전달
서버에서 클라이언트로 응답 본문을 보내면 웹 브라우저가 알아서 Content-Type을 분석하여 처리
클라이언트에서 서버로 요청 본문을 보내면 서버 개발자가 직접 Content-Type에 따른 대응을 해야 함
body-parser 미들웨어
요청한 본문의 Content-Type에 따라 본문을 분석해주는 미들웨어
단, multipart 형태는 분석하지 못함
body-parser 미들웨어는 express에 기본 설치됨
application/x-www-form-urlencoded 형식의 본문을 처리하는 방법
app.use(express.urlencoded({extended: false}));
extended: false는 node.js에 포함된 queryString 라이브러리를 사용한다는 의미
요청 본문 종류
MIME 형식
설명
application/s-www-form-urlencoded
웹 브라우저에서 입력 양식을 POST,PUT,DELETE 방식 등으로 전달할 때 사용하는 기본적인 요청 형식
application/json
JSON 데이터로 요청하는 방식
multipart/form-data
대용량 파일을 전송할 때 사용하는 요청 방식
const express = require("express");const app = express();app.use(express.static("public"));app.use(express.urlencoded({ extended: false }));app.get("/", (request, response) => { let output = ""; // form 형식의 html을 넘겨줌 output += '<form method="post">'; output += ' <input type="text" name="a" />'; output += ' <input type="text" name="b" />'; output += ' <input type="submit" />'; output += "</form>"; response.send(output);});app.post("/", (request, response) => { // form을 통해서 넘겨 받은 데이터를 출력 console.log("a =", request.body.a); console.log("b =", request.body.b); response.send(request.body);});app.listen(52273, () => { console.log("Server running at http://localhost:52273");});