Express 4의 언젠가 버전부터 Express Generator에 handlebars가 기본 내장된 Templating Language가 되었다 (여전히 Jade가 기본임은 변함이 없다…)

Meteor를 써보면서 Blaze를 좀 접하게 되었는데 Handlebar의 특유 {{ }} 문법에 꽤 익숙해졌더니 편해져서 Express Generator로 Application을 생성할때에도 자연스레 기존에 쓰던 ejs를 놓고 Handlebars로 갈아타게 되었는데, Meteor에서 손 쉽게 등록하던 Helper와는 달리 Express에서는 대체 어떻게 하는건지 찾아보다 몇몇 방법과 함께 괜찮은 Helper들을 발견했다.

그냥 따로 handlebars helper js 파일을 따로 관리해서, 필요한 부분 (대개 routes 쪽 이리라 생각…)에 require 해서 사용하면 된다.

개발을 하다보면 좀더 정교한 메카니즘을 필요로 할 때가 많다. 근데 이 두 녀석으로는 단지 true/false 밖에 체크를 못하기 때문에 복잡하게는 작성할 수가 없어서 이에 대해 찾아보다가 stack overflow에서 멋진 답변을 찾아서 남겨놓는다.

var hbs = require('hbs');

hbs.registerHelper("ifCond", function (v1, operator, v2, options) {
  switch (operator) {
    case '==':
      return (v1 == v2) ? options.fn(this) : options.inverse(this);
    case '===':
      return (v1 === v2) ? options.fn(this) : options.inverse(this);
    case '<':
      return (v1 < v2) ? options.fn(this) : options.inverse(this);
    case '<=':
      return (v1 <= v2) ? options.fn(this) : options.inverse(this);
    case '>':
      return (v1 > v2) ? options.fn(this) : options.inverse(this);
    case '>=':
      return (v1 >= v2) ? options.fn(this) : options.inverse(this);
    case '&&':
      return (v1 && v2) ? options.fn(this) : options.inverse(this);
    case '||':
      return (v1 || v2) ? options.fn(this) : options.inverse(this);
    default:
      return options.inverse(this);
  }
});

원본 링크