오늘은 NodeJS에서는 뷰템플릿 엔진인 Handlebars에서,
사용하는 helper 함수 사용방법에 대해서 정리해 보겠습니다.
handlebars에 대해서는 아래 글을 참조해 주세요.
>> Handlebars 사용방법의 모든 것: Nodejs 뷰 템플릿 엔진
1. Helper함수
헬퍼는 템플릿에서 호출할 수 있는 함수인데요.
데이터와 템플릿 사이에서,
내장함수만으로는 처리할 수 없는,
처리를 수행합니다.
서버에서 출력해 준 데이터에 1씩 더해주거나,
복잡한 조건부 로직을 처리해야 할 때,
이런 Helper함수를 사용해야 하겠지요.
2. Helper함수 등록방법
heler함수를 설정하는 방법은 여러 가지가 있습니다.
이 글에서는,
이전 글에서 알려드린 handlebars를 뷰엔진으로 사용하는 방법에서,
조금 수정하여 설정하는 방법으로 알아보겠습니다.
아래 코드와 같이 해주면 되는데요.
핵심이 되는 부분은,
'helpers: { '로 시작하는 부분입니다.
이 안에, 원하는 함수를 등록해서 사용할 수 있는데요.
예를 들어 아래에서는 대문자로 변환시켜주는 함수인,
capitalize함수와,
두 값이 동일한지 비교해주는 equals함수를 등록해 사용합니다.
const express = require('express');
const { engine } = require('express-handlebars');
const app = express();
const hbs = engine({
extname: '.hbs',
defaultLayout: false
helpers: {
// 문자열의 첫 글자를 대문자로 변환
capitalize: function(text) {
if (typeof text !== 'string') return '';
return text.charAt(0).toUpperCase() + text.slice(1);
},
// 두 값이 동일한지 비교
equals: function(a, b) {
return a === b;
}
}
});
app.engine('hbs', hbs);
app.set('view engine', 'hbs'); # 뷰엔진으로 handlebars 설정
app.set('views', './views');
// 라우트 설정
app.get('/', (req, res) => {
res.render('home', {name: '김군'});
// todo: 아래에서 helper함수 사용 코드 추가
});
// 서버 시작
app.listen(3000, () => console.log(`Server is running on http://localhost:${PORT}`));
helper함수를 등록하는 방법으로 아래와 같이,
registerHeper() 함수를 사용하는 방법도 있는데요.
가볍게 알아보고 가겠습니다.
필요하지 않으신 분들은,
이런 방법도 있구나 하고,
한번 훑어만 보고 가셔도 됩니다.
const express = require('express');
const exphbs = require('express-handlebars');
const app = express();
// Handlebars 설정
const hbs = exphbs.create({
defaultLayout: 'main',
extname: '.hbs'
});
app.engine('.hbs', hbs.engine);
app.set('view engine', '.hbs');
// Helper 함수 정의
hbs.handlebars.registerHelper('capitalize', function(text) {
return text.charAt(0).toUpperCase() + text.slice(1);
});
hbs.handlebars.registerHelper('equals', function(a, b, opts) {
if (a == b) {
return opts.fn(this);
} else {
return opts.inverse(this);
}
});
// 라우트 설정
app.get('/', (req, res) => {
res.render('home', {name: '김군'});
// todo: 아래에서 helper함수 사용 코드 추가
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
3. 등록한 Helper함수 사용하기
이제 등록된 helper함수를 사용할 차례입니다.
Helper함수는 다음의 형식으로 사용해 주면 되는데요.
{{헬퍼이름 인자1 인자2 ...}}
. hbs파일에서 아래와 같이 사용해 주면 됩니다.
<!DOCTYPE html>
<html>
<head>
<title>Handlebars Helper 예제</title>
</head>
<body>
<h1>안녕하세요, {{capitalize name}}님!</h1>
<!-- equals 헬퍼 사용 예시 -->
{{#if (equals name '김군')}}
<p>관리자이신 김군님 환영합니다!</p>
{{else}}
<p>일반 사용자님 환영합니다.</p>
{{/if}}
<div>
<!-- capitalize 헬퍼 사용 예시 -->
<p>첫글자 소문자를 대문자로: {{capitalize "hello"}} World!</p>
</div>
</body>
</html>
실행해보면, 아래와 같은 결과를 볼 수 있습니다.
지금까지 Handlebars의 helper함수에 대해 알아보았는데요.
Handlebars의 내장함수만으로 부족할 때,
한 번씩 사용하다 보면,
사용법이 간단해서 금방 익숙해집니다.
'NodeJS, NPM, Koa > handlebars (hbs)' 카테고리의 다른 글
NodeJS Handlebars 레이아웃 분리하기: Navigation과 Bottom (0) | 2024.09.16 |
---|---|
tailwind css 와 handlebars 함께 사용하기 (1) | 2024.09.13 |
Handlebars 사용방법의 모든 것: Nodejs 뷰 템플릿 엔진 (0) | 2024.04.02 |
댓글