application/x-www-form-urlencoded
타입으로 들어오는 데이터를 req.body
로 파싱해주는 역할을 합니다.
옵션 값: extend: boolean
=> true
면 내장 모듈인 querystring
사용, false
면 설치해야하는 qs
사용
enctype
이 application/x-www-form-urlencoded
인 데이터는 name=john&age=2
같은 형식으로 데이터가 전달된다.
해당 데이터를 파싱해서 객체형태로 req.body
에 넣어주는 역할을 한다.
application/json
타입으로 들어오는 데이터를 req.body
로 파싱해주는 역할을 합니다.
정적 파일들을 제공해주는 역할을 한다.
app.use(express.static("/", path.join(__dirname, "public")))
public
폴더에 있는 파일들을 브라우저에서 /
로 접근할 때 보여주라는 의미이다.cookie를 브라우저로 전송할 때 서명하거나 cookie를 받을 때 파싱해서 req.cookies
or req.signedCookies
에 넣어주는 역할을 한다.
쿠키파서 사용 예시: app.use(cookieParser("서명에 사용할 비밀키"))
쿠키 생성 예시 ( 서버 -> 브라우저 )
res.cookie(키값, 속성값, 옵션값)
옵션값은 maxAge
, expires
, path
, domain
, secure
, httpOnly
, signed
가 있다.
쿠키 받는 예시
1. req.cookies.키값
( 서명안된 쿠키 )
2. req.signedCookies.키값
( 서명된 쿠키 )
서버측에서는 특정 방식으로 데이터전체를 저장하고 해당 데이터를 식별할 수 있는 식별자를 쿠키(세션쿠키)에 실어서 보내는 방식을 사용한다.
여기서 특정 방식이란 메모리, 파일, 데이터 베이스(mysql, mongodb, radis)등을 의미한다.
사용 예시: app.use(expressSession({옵션값}))
옵션값에는 httpOnly
, secure
, secret
, resave
, saveUninitialized
, cookie
, store
등이 있다.
next()
에 인자를 넘겨줄 경우에 에러 처리 미들웨어에서 받아서 처리해 준다.
주의할 점은 미들웨어는 순서대로 실행되므로 가장 마지막에 붙여줘야 다른 요청을 가로채지 않는다.
// 404 에러처리 미들웨어
app.use(function(req, res, next) {
console.log("404 에러처리 미들웨어");
res.status(404).send('404');
});
// 에러처리 미들웨어
app.use((error, req, res, next) => {
console.error("에러처리 미들웨어 >>", error);
res.status(500).json({ error: "Error" });
});
import dotenv from "dotenv";
dotenv.config();
import path from "path";
import express from "express";
import cookieParser from "cookie-parser";
import expressSession from "express-session";
import fileStore from "session-file-store";
const __dirname = path.resolve();
const FileStore = fileStore(expressSession);
const app = express();
app.set("PORT", process.env.PORT);
// middleware
app.use("/", express.static(path.join(__dirname, "public")));
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(
expressSession({
resave: false,
saveUninitialized: false,
name: "session-cookie",
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false,
},
store: new FileStore(),
}),
);
// routes
import authRouter from "./routes/auth.js";
// router 등록
app.use("/auth", authRouter);
// 404 에러처리 미들웨어
app.use(function(req, res, next) {
console.log("404 에러처리 미들웨어");
res.status(404).send('404');
});
// 에러처리 미들웨어
app.use((error, req, res, next) => {
console.error("에러처리 미들웨어 >>", error);
res.status(500).json({ error: "Error" });
});
app.listen(app.get("PORT"), console.log(`${app.get("PORT")}번 대기중`));