이번엔 express의 next()함수를 이용해서 모든 요청 또는 특정URL 요청에 대한 공통로직으 처리하는 방법을 알아보겠습니다. 특히, 최종 호출되는 ejs에서 사용할 수 있도록 값을 세팅해서 다음 미들웨어 함수로 전달하는 방법도 알아보겠습니다.
Express 애플리케이션 레벨 미들웨어에서 공통로직 추가
web.js(app.js)에 아래와 같이 추가하면 모든 요청에 대해 공통로직을 추가할 수 있습니다.
next()를 호출하면 다음 라우터 레벨 미들웨어 함수를 호출합니다. (요청 URL에 맞는 라우팅을 찾아서 실행)
var express = require('express');
var app = express();
app.use(function(req, res, next){
..공통로직 처리..
next();
});
모든 URL이 아닌 특정 URL 경로에 맞는 경우만 실행하려면 첫번째 인자에 URL 경로를 추가해줍니다.
app.use('/admin/:id', function (req, res, next) {
..관리자 권한 체크...
next();
});
공통 EJS 파일(header나 footer)에서 사용할 데이터를 세팅하는 방법
클라이언트에서 넘어온 파라미터가 아니라 애플리케이션 레벨 미들웨어에서 설정한 값을 ejs 파일에서 사용하려면 'res.locals.변수명 = 값' 을 이용하면 됩니다.
app.use(function(req, res, next){
res.locals.isLogin = true;
});
어떤 경우에 사용할까?
모든 파일에 공통적으로 include 되는 header.ejs에 로그인한 정보를 표시하는 로직이 있었습니다.
<div id="naverLogout" class="header-profile">
<% if(isLogin){ %>
<div>
<img src="<%=loginObj.profileImage%>" alt="회원 이미지"/>
<div style="font-size:10pt;">
<span><%=loginObj.mberNm%>님</span>
</div>
</div>
<% }else{ %>
<div>
<img src="/css/images/myInfo.gif" alt="회원 이미지"/>
<div style="font-size:10pt;">
<span>Guest모드</span><br/>
</div>
</div>
<% } %>
</div>
header.ejs는 모든 ejs 파일에 include 되어 있습니다.
<% include ../layout/header %>
모든 요청에 대해 ejs 파일로 res.render를 하기 전에 isLogin 이라는 변수를 세팅해줘야 했습니다.(isLogin이 없으면 에러가 발생함)
//일반적으로 뷰에 렌더링할 때 데이터를 념겨주는 방법
router.get('/club/list', function (req, res) {
res.render("club/list", {isLogin : true});
});
모든 라우팅 처리 로직에 isLogin 값을 세팅하는 로직을 추가하기는 어려우니, 위에서 알아본 express next 함수를 이용해서 아래와 같이 처리했습니다. 'res.locals.isLogin = true' 을 하면 마지막에 뷰 렌더링한 EJS 파일에서 isLogin을 사용할 수 있게 됩니다.
app.use(function(req, res, next){
var cookieLoginObj = req.signedCookies.loginObj;
if(cookieLoginObj && cookieLoginObj.mberSn !== ''){
res.locals.loginObj = cookieLoginObj;
res.locals.isLogin = true;
}else{
var loginObj = {
mberNm : "",
mberSn : "",
profileImage : "",
isTest : ""
};
res.locals.loginObj = loginObj;
res.locals.isLogin = false;
}
res.locals.clubSn = '';
next();
});
참고 :
https://expressjs.com/ko/guide/using-middleware.html
Express 미들웨어 사용
미들웨어 사용 Express는 자체적인 최소한의 기능을 갖춘 라우팅 및 미들웨어 웹 프레임워크이며, Express 애플리케이션은 기본적으로 일련의 미들웨어 함수 호출입니다. 미들웨어 함수는 요청 오브젝트(req), 응답 오브젝트 (res), 그리고 애플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수 대한 액세스 권한을 갖는 함수입니다. 그 다음의 미들웨어 함수는 일반적으로 next라는 이름의 변수로 표시됩니다. 미들웨어 함수는 다음과 같은 태스크를
expressjs.com
'Node.js' 카테고리의 다른 글
[Node.js 12강] 파일 업로드 하기 (multer 모듈 사용, 한번에 파일 여러개 업로드하기, 삽질한 결과 공유) (1) | 2019.04.25 |
---|---|
[Node.js] 이클립스(eclipse)에서 ejs 파일 가독성 높이기 위해 text 모드(포맷) 설정하는 방법 (0) | 2019.04.18 |
[Node.js 7강] 클라이언트-서버간 데이터(파라미터) 전송 방법과 REST방식 URL 설계 (0) | 2019.04.03 |
[Node.js 10강] 암호화된 cookie를 이용한 로그인/로그아웃 처리 (0) | 2019.04.02 |
[Node.js 9강] 외부서비스 API(네이버밴드) 적용하기 (0) | 2019.04.02 |