Merhabalar

Bu yazımda express uygulamalarımızda kullanmak üzere kendi template motorlarımızı nasıl yaratabileceğimizi anlatmaya çalışıyorum.

Node JS’in en popüler uygulama geliştirme çatısı olan express’de server-side render yani sunucu taraflı çıktı hazırlama işlemleri için template engine adı verilen şablon motorlarını kullanırız, örneğin en popülerleri jade ve ejs dir.

Peki eğer istersek bizim belirlediğimiz kurallarla çalışan kendi template motorlarımızı yaratmamız mümkün mü?

Tabi ki mümkün

Express’de kullanmak üzere kendi template motorunu yaratmak için app.engine(ext, callback) metodunu kullanabilirsin, bu metodun aldığı birinci parametre ext extension yani dosya uzantısını temsil eder, ikinci parametre de template motorunun dosyayı kabul ettikten sonra yapacağı işlemler için bir asenkron fonksiyondur, bu fonksiyona girilecek objeler filePath adındaki dosya adresi ve şablona basılacak dinamik değerleri içerecek olan options objesidir.

Şimdi aşağıdaki kodla çok basit bi template motoru geliştirelim, dosya uzantımız “.ebe” olsun.

var fs = require('fs'); // dosya işlemleri yapacağımız için fs modülünü çağırmak zorundayız
app.engine('ebe', function (filePath, options, callback) { // burada template incaynımızı tanımlıyoruz ^^
  fs.readFile(filePath, function (err, content) {
    if (err) throw new Error(err);
    // burada çok basit bi render işlemi yapıyoruz ancak mantığı anlamana yetecektir
    var rendered = content.toString().replace('#title#', '<title>'+ options.title +'</title>')
    .replace('#message#', '<h1>'+ options.message +'</h1>');
    return callback(null, rendered);
  })
});
app.set('views', './views'); // burada views klasörümüzü kendimiz belirleyebiliriz
app.set('view engine', 'ebe'); // dosya uzantımızı belirterek template motorumuzu express'e tanımlıyoruz

Express uygulamamız artık .ebe uzantılı dosyaları render edebilecek, hemen index.ebe adında bir dosya oluşturup view klasörünün içine atalım ve içine şunları yazalım.

#title#
#message#

Daha sonra express uygulamamızda şu rotayı tanımlıyoruz.

app.get('/', function (req, res) {
  res.render('index', { title: 'Ebe Template Engine', message: 'Web artık ebelere emanet!'});
})

Uygulamayı ayağa kaldırdıktan sonra “/” adresini ziyaret edip sonucun html’e render edilmiş halini görebilirsin.

  • Furkan Başaran

  • Toyota Motor Europe bünyesinde Web Developer olarak çalışıyor.
Beğendiniz mi? O halde paylaşın: