익스프레스는 Node.js를 위한 웹 프레임워크 중 하나로 오픈 소스로 공유되고 있다. Node.js 의 사실상의 표준 서버 프레임워크로 불리고 있다. 출처 : 위키백과
npm : 직접 셋팅
npm install express
익스프레스는 RestAPI 와 매우 유사한 설계 구조를 가지고 있다.
express 로 선언된 하나의 어플리케이션이 수많은 라우터들로 연결되고 그 라우터들이 각각의 기능을 하는 컨트롤러로 연결되는 구조이다.
자세한 내용은 관련 문서를 참고하자
REST API 참고
익스프레스는 View Engine 셋팅이 가능하다.
PUG 와 같은 생산성 좋은 HTML 템플릿을 작성하고 랜더링 할 수 있게 해준다.
const app=express(); // 앞으로 app 이 있다고 전제하고 작성함
app.set("view engine", "pug");
app.set("views", process.cwd() +"src/views");
세션 쿠키의 차이에 대해서는 관련문서를 참고하도록 하자.
익스프레스는 세션을 사용할 수 있다.
app.use(
session({
secret: // 세션 생성시 필요함
resave: // ?
saveUnitialized: // ?
cookie: {
maxAge: // 소멸시기 지정
}
});
);
익스프레스에서는 정적 경로를 설정할 수 있다.
예를 들면 업로드한 파일들이.. 이미지는 /static/image 비디오는 /static/video 의 경로를 가지게 된다는 등...
일반적으로 path-name 과 folder-name 은 동일하게 하는 것이 좋다.
app.use("/path-name/", express.static("folder-name"));
익스프레스의 의존성은 req,res,next 뿐이고 req,res 는 사실상 웹 브라우저라면 가질 수 밖에 없다. 따라서 매우 의존성이 낮고 안정적이라는 특성을 가지게 된다.
Middleware 또한 마찬가지이다.
req,res 를 받고 특정 기능을 하고 다음 부분(next)로 넘겨주게 되는 구조이다.
아래는 미 로그인 유저가 인증이 필요한 URL 에 접근할 때 차단하고 login 페이지로 안내하는 미들웨어이다.
export const preventURLMiddleware=(req,res,next)=>{
if(req.session.loggedIn){
}else{
return res.status(404).redirect("/login");
}
}
마찬가지로 업로드 라이브러리 multer 를 이용한 Upload Controll Middleware 또한 위와 같이 작성한다.
export const uploadVideoMiddleware=multer({
dest: "uploads/videos/",
limits: { /* settings */ },
});
익스프레스는 수많은 연결점들을 관리할 수단으로 라우터를 지원한다.
import express from "express";
const videoRouter=express.Router();
videoRouter
.route(path)
.all(middleware)
.get(getContoller)
.post(postController);
위와 같은 양식으로 작성하거나..
videoRouter
.get("path",getContoller)
위와 같이 모아서 작성하는 방법도 있다.
나는 전부 찢어서 작성하는 최초의 방법을 좋아한다.
export const getController=(req,res)=>{
const {
params:{}, // url 안의 변수
body:{}, // form 안의 내용
session:{}, // session 안의 내용
query:{}, // url 안의 변수 (serach?=검색내용... 등)
}=req;
res.redirect("/"); // 경로로 안내 (재연결됨)
res.render("/template",{ args });
};
/src/initial.js
/src/index.js
/src/database.js
/src/middleware.js
/src/router/videoRouter.js
/src/router/userRouter.js
/src/controller/videoController.js
/src/controller/userController.js
/src/model/videoModel.js
/src/model/userModel.js
/src/views/base.pug
/src/views/home.pug
/src/views/video/see-video.pug
/src/views/video/search-video.pug
/src/views/video/edit-video.pug
/src/views/user/ses-profile.pug
/src/views/user/search-user.pug
/src/views/user/edit-profile.pug
/src/views/mixins/mixin-video.pug
/src/views/mixins/mixin-user.pug
/src/views/partials/navigation.pug
/src/views/partials/footer.pug