Express란?

NodeJS에서 서버를 쉽게 만들기위한 웹 프레임워크이다

아래의 코드로 아주아주 쉽게 서버를 생성 할 수 있다

const express = require("express");
const app = express();

const PORT = 3000;

app.listen(PORT);

( URL 요청에 답하는 코드가 없어서 Cannot GET / 이 나오는 것이 정상이다 )


라우팅(Routing)

라우팅이란?

서버에서 클라이언트로 요청한 데이터를 전달할 수 있도록 길을 만들어 주는 것을 말한다

( 라우트 메소드는 HTTP 메소드로 파생되는데, 나중에 따로 정리해야겠다)

How to use

import express from "express";
const app = express();

const PORT = 3000;

const handleHome = (req,res)=>{
    res.send("Hello world");
}

app.get("/", handleHome);

app.listen(PORT);

위 코드 중 아래의 코드가 라우팅을 해준다

app.get("/", handleHome);

클라이언트에서 http://localhost:3000 으로 접속시 서버가 handleHome 함수를 실행하여 응답한다

이게 라우팅이다

클라이언트의 어떤 URL로 접속하는 것과 서버가 그에대해 응답하는 것을 연결해주는 작업이다

라우터(Router)

라우터는 라우팅 코드를 따로 파일로 정리 할 수 있게 도와주는 express 내장 모듈이다

router.js

import express from "express";

export const userRouter = express.Router();

userRouter.get("/", (req, res) => res.send("user index"));
userRouter.get("/edit", (req, res) => res.send("user edit"));
userRouter.get("/password", (req, res) => res.send("user password"));

위 코드 처럼 express.Router() 모듈을 이용하여 따로 라우팅 코드를 따로 둘 수 있다

app.js

import { userRouter } from "./router";

app.use("/user", userRouter);

라우터를 사용할 때에는 app.use() 메서드를 사용해야 한다!

이제 http://localhost:3000/user 로 들어가면 "user index "

이제 http://localhost:3000/user/edit 로 들어가면 "user edit "

이제 http://localhost:3000/user/password 로 들어가면 "user password "

가 나오게 된다


미들웨어 (MiddleWare)

미들웨어란?

라우팅 하는 작업에서 요청을 받고 응답 메서드를 실행하기 전에 처리하는 메서드를 말한다

How to use

GET 요청을 받고 응답메서드(handleHome)이 실행되기 전 미들웨어를 넣어 실행하게 하려면 아래처럼 작성하면 된다

import express from "express";
const app = express();

const PORT = 3000;

const handleHome = (req,res)=>{
    res.send("Hello Wolrd");
}

const middleWare = (req,res,next)=>{
    console.log("I'm middleware");
    next();
}

app.get("/", middleWare, handleHome);

app.listen(PORT);

이렇게 하면 handleHome 메서드가 실행되기 전에 콘솔에 "I'm middleware"가 나오게 된다

next() 는 다음 단계(다음미들웨어 or 응답메서드)로 넘겨주는 역할을 한다

이렇게 미들웨어를 개수 상관없이 넣을 수 있다

미들웨어로 중간에서 끊기

응답에 대한 처리 중 미들웨어로 마지막 응답 메서드 전에 중간에서 끊을 수 있다

const middleWare = (req,res,next)=>{
    res.send("I cut off!!!");
}

위 처럼 미들웨어에서 응답을 하고 next() 를 사용하지 않는다면 미들웨어가 최종 응답메서드가 된다

전역 미들웨어

여러 라우팅 처리에 같은 미들웨어를 사용 할 수도 있으니 전역 미들웨어도 필요하다

import express from "express";
const app = express();

const PORT = 3000;

const handleHome = (req,res)=>{
    res.send("Hello Wolrd");
}
const handleProfile = (req,res)=>{
    res.send("Welcome Profile");
}

const middleWare = (req,res,next)=>{
    console.log("I'm middleware");
    next();
}

app.use(middleWare);

app.get("/", handleHome);
app.get("/profile",

app.listen(PORT);

위처럼 app.use()를 사용하면 된다

http://localhost:3000http://localhost:3000/profile 두 곳 다 접속해도 미들웨어는 실행된다

( app.use()의 위치가 상당히 중요하니 적용할 라우팅 위쪽에 작성하자! )

유용한 미들웨어

좋은 사람들이 많은 미들웨어를 만들어 놓았으니 한번 써보는 것도 좋다

내가 사용해본 유용한 미들웨어 모음

  • 로깅(로그를 기록하는) 미들웨어 : morgan

  • nodeJS 보안 미들웨어 : helmet


Static 파일

Static 파일이 뭐지?

Static 파일이란 웹 사이트 구성요소 중 Image, CSS, Script 파일과 같이 그 내용이 고정되어 응답을 할 때, 별도의 처리 없이 파일 내용을 그대로 보내주면 되는 파일

Express에서 static 파일 설정

import express from 'express'

const app = express();

app.use('/static', express.static('static'));

위의 app.use('/static', express.static('static')); 뜻은 이렇다
: '/static' URL로 요청이 오면 static 폴더에서 꺼내줘라!