Nodejs Kitap
Transkript
Nodejs Kitap
Node.js Dr. Özcan Kasal İçindekiler Bölüm 1: Node.js 1 Giriş 2 Node.js Nedir? 2 Node.js Kullanım Alanları 3 Node.js Avantajları ve Dezavantajları 3 Neler Öğrendik? 5 Bölüm 2: Kurulum ve Geliştirme Ortamı Oluşturma 7 Node.js Kurulumu 8 Windows Üzerinde Kurulum 9 Mac OS X Üzerinde Kurulum 11 Ubuntu Üzerinde Kurulum 12 Geliştirme Ortamı için Gerekli Araçlar 13 Konsol Kullanımı ve İlk Node.js Programı 14 Node.js Betiklerini Yürütme 15 Neler Öğrendik? 17 Bölüm 3: Node.js Modülleri 19 Giriş 20 Node.js Modül Anatomisi 21 Örnek Modül Yaratma 22 require Komutu 23 module.exports Komutu 26 module.exports ve exports 27 Node.js Modüllerini Gruplama 28 Neler Öğrendik? 29 vii Node.js İçindekiler Bölüm 4: NPM ile Paket Yönetimi 31 Giriş 32 JSON 32 NPM Paket Yönetim Sistemi 34 NPM ile Paket Yükleme ve Kaldırma 36 package.json Dosyası ve Kullanımı 38 Bağımlılıklar ve Bağımlılık Yönetimi 40 Yerel ve Global Node.js Modülleri 41 Neler Öğrendik? Bölüm 5: Olaylar ve Veri Akımı 42 43 Giriş 44 EventEmitter Sınıfı ve Kullanımı 44 I/O İşlemleri, PATH ve FS Modülleri 51 path Modülü 54 fs Modülü 55 Dosya Açma 56 Dosya İstatistiklerini Görüntüleme 57 Dosyaya Yazma 59 Dosya Okuma 60 Dosya Kapatma 61 Dosya Konumu Değiştirme 62 Dosya Silme 63 Klasör Yaratma 64 Klasör İçeriğini Listeleme 65 Klasör Silme 66 viii Node.js İçindekiler Stream Yönetimi 67 Okunabilir Stream 67 Yazılabilir Stream 70 Pipe (Veri Yolu) 70 Pipe Zinciri 71 Neler Öğrendik? 72 Bölüm 6: Node.jz ve Http 75 Giriş 76 HTTP Başlıklarının Anatomisi 76 HTTP Sunucusu Yaratma ve Çalıştırma 79 HTTP Sunucusu Üzerinde İlk Program 81 HTTP Yöntemleri 84 Örnek Uygulama HTML Formu 84 HTTP Yanıt Statü Kodları 87 Neler Öğrendik? 89 Bölüm 7: Express ile Web Yönetimi 91 Giriş 92 Express Nedir? 92 Express Kurulumu Jade ile Html Şablonu Oluşturma 93 100 include Komutu 103 extends Komutu 103 Express Request Nesnesi 104 Express Response Nesnesi 104 Rota Yönetimi 105 Neler Öğrendik? 109 ix Node.js İçindekiler Bölüm 8: MongoDB 111 Giriş 112 NoSQL Veritabanlarına Genel Bakış 112 MongoDB Kurulumu 115 Windows Üzerinde Kurulum 115 Ubuntu Üzerinde Kurulum 117 MongoDB Sunucusu Çalıştırma 118 JSON ve BSON 119 MongoDB Veri Modeli 120 Koleksiyon adları 121 Döküman Veri Tipleri 121 Döküman _id Değeri 122 MongoDB Komutları 123 Koşullu Arama 125 Sıralama 126 Limit Ekleme 126 Döküman Güncelleme 126 Döküman Silme 127 Koleksiyon Adı Değiştirme 127 Koleksiyon Silme 128 Veritabanı Silme 128 Node.js ile MongoDB Kullanımı 128 Mongoose Modelleri 130 Örnek Uygulama 134 Çalışma Ortamının Hazırlanması 135 Uygulama Geliştirme Adımları 137 Uygulamanın Geliştirilmesi 137 Neler Öğrendik? 148 x Node.js İçindekiler Bölüm 9: Socket.ıo ile Gerçek Zamanlı Uygulama Geliştirme 151 Giriş 152 WebSocket Teknolojisine Genel Bakış 152 Socket.io ve Node.js ile Kullanımı 156 Socket.io Protokolü 160 Örnek Uygulama Sohbet Odası 161 Çalışma Ortamının Hazırlanması 162 Sohbet Odası Tasarımı 162 İstemci Socket Bağlantılarının Yapılandırılması 163 Neler Öğrendik? Bölüm 10: MVC Mimarisi ve Saıls.js 167 169 Giriş 170 Neden MVC? 170 Saıls.js ve Kurulumu 171 Api Klasörü 174 Assets Klasörü 174 Config Klasörü 174 Views Klasörü 174 Sails.js Genel Yapılandırma Ayarları 174 MongoDB Bağlantısı Oluşturma 178 Şablon Motoru Yapılandırması 178 JavaScript Yapılandırması 182 Model Oluşturma 185 Controller Yapılandırma 186 Neler Öğrendik? 189 xi Node.js İçindekiler Bölüm 11: Sessıon Yönetimi ve Yetkilendirme 191 Giriş 192 Session Nedir? 192 HTTP Çerezleri 193 JavaScript ve Çerezler 196 Node.js ile Session Yönetimi 199 Passport ile Yetkilendirme 207 Neler Öğrendik? 221 İndeks 222 1 Node.js Bu Bölümde Giriş Node.js Nedir? Node.js Kullanım Alanları Node.js Avantajları ve Dezavantajları Neler Öğrendik? 2 2 3 3 5 Bu bölümde, size Node.js platformunu genel hatlarıyla tanıtmaya çalışacağız. Bloklamayan I/O (dosya sistemine yazma ve okuma) işlemlerinin, socket yönetimi ve diğer tüm işlemlerin Node.js platformu ve JavaScript ile asenkron program akışı modeli içerisinde doğal bir şekilde yapılabilmesinin vazgeçilmez rahatlığından bahsedeceğiz. 2 Bölüm 1 Node.js Giriş Yeni bir dil öğrenmek istiyorsanız ya da yeni bir platform kullanmak durumundaysanız bu yolda en önemli adım öğreneceğiniz dili ya da platformu, genel çalışma prensiplerini, diğer dillerden ya da platformlardan ayrılan yönlerini öğrenmek olabilir. Bu detaylara hakim olduğunuz zaman, bu dilin ya da platformun sizin amaçlarınız için uygun olup olmadığına karar verebilirsiniz. Node.js özellikle web için dizayn edilmiş olan ve internet tarayıcıları tarafından desteklenen JavaScript dilinin sunucu tarafında kullanılabilmesine olanak sağlamıştır. Böylece sunucu ve istemci için kodlama farklılıklarını ortadan kaldırmıştır. Tek programlama dili kullanarak tüm ihtiyaçların giderilmesinin önünü açmıştır. Veri tipi olarak JSON benzeri bir yapı kullanan MongoDB’nin de vitrinlerde yerini almasıyla Node.js ve dolayısıyla JavaScript gücünü tümden artırmıştır. WebSocket gibi günümüz web teknolojilerini kullanabilen uygulamaların tek dil çerçevesinde geliştirilmesini sağlamıştır. JavaScript sayesinde elde edilen geliştirme kolaylığının yanısıra Node.js tek yürütmeli (single threaded) mimari yapı içerisinde asenkron program akışını kullanmaktadır. Bu ise geliştiricilere geliştirdikleri yazılımlarda yüksek performans ve ölçeklendirilebilme olanaklarını sunmuştur. Bunlara ek olarak Node.js ile birlikte gelen paket yönetim sistemi NPM ile geliştiriciler ihtiyaç duydukları paketleri bir havuzdan elde ederek kolayca uygulamalarına ekleyebilmektedirler. Node.js Nedir? Node.js sunucu tarafında JavaScript kodlama dilini kulanarak web uygulamaları geliştirmek için kullanılan açık kaynaklı bir yürütme çevresi platformudur. Node. js için geliştirici ekip nodejs.org adresindeki proje sayfasında şu tanımlamayı yapmakta: Node.js platformu Chrome V8 JavaScript motoru üzerine inşa edilmiş bir Javascript yürütme platformudur. Node.js platformunun olay-güdümlü, bloklamayan bir I/O modeli kullanması platformu hafif ve verimli bir hale getirmektedir. Node.js platformunun paket ekosistemi olan NPM, dünyadaki en geniş açık kaynak ekosistemidir. Web programcılığı ile az ya da çok ilgilenmiş olan geliştiriciler bir noktada JavaScript ile karşılaşmışlardır. İnternet tarayıcıları üzerinde bir sanal makina içinde yürütülen JavaScript kodları açılan pencere çerçevesi içinde ulaşılabilir durumdadır. Genellikle JavaScript dilini html belgelerindeki DOM elemanlarını değiştirmek ya da AJAX istekleri göndermek için kullanmışızdır. Aslına bakarsanız JavaScript dili tıpkı diğer programlama dilleri gibi geniş özelliklere sahip Node.js Avantajları ve Dezavantajları 3 bir programlama dilidir. Google Chrome için geliştirilen V8 JavaScript sanal makinası sayesinde JavaScript kodlarını tarayıcı çerçevesi dışında yüksek hızlarda yürütmek mümkün hale gelmiştir. Bu sayede Node.js platformu dosya sistemine ulaşabilmekte, modül yapısı sayesinde ölçeklendirilebilir web uygulamaları geliştirmeye uygun olarak HTTP sunucusu görevi de görebilmektedir. Node.js Kullanım Alanları Eğer sunucu ile kullanıcı arasında sürekli bir bağlantı gerektiren ve bu bağlantı üzerinde yoğun olarak gerçek zamanlı veri transferi gerçekleştiren bir uygulama tasarlamak istiyorsanız Node.js sizin için uygun bir platform olabilir. Node.js ve Socket.io kombinasyonu ile kullanıcıya gerçek zamanlı olarak güncelleme bilgileri veren bir uygulama geliştirebilirsiniz. Ruby on Rails gibi programlama dillerini kullanarak yazılan uygulamalar sunucu üzerinde büyük yük ortaya çıkarabilirler. Çünkü her bir aktif kullanıcı için ayrı bir sunucu süreci başlatılacaktır. Node.js ise her bir kullanıcı için ayrı bir sunucu süreci başlatmaya gerek duymadan tek bir süreç üzerinde tüm işlemleri olay-döngüsü modeli içerisinde yürütebilir. Örneğin bir sohbet uygulaması tasarlamak istiyorsanız Node.js uygun bir platform olacaktır. Benzer şekilde online oyun servisleri, ortak çalışma platformları gibi alanlarda Node.js üstün performansı ile göz dolduracaktır. İnternet üzerinde konuyla ilgili biraz araştırma yaparsanız göreceksiniz ki milyonlarca kullanıcısı bulunan, internet üzerinden satış gerçekleştiren birçok firma Node.js platformunu kullanmaktadır. Sosyal medya olarak adlandıracağımız, kullanıcıların yoğun etkileşim içinde bulunduğu, resim, video, ses dosyalarının yoğun olarak paylaşıldığı sistemlerde Node.js yüksek performans, düşük sistem gereksinimleri ve geliştirme maliyeti sağlayabilir. Node.js Avantajları ve Dezavantajları Öncelikle Node.js ile uygulama geliştirilirken sunucu ve istemci tarafındaki kodlar için tümüyle JavaScript kullanılması, veri transferi, form doğrulama, veritabanı işlemleri (MongoDB kullanılarak) ve DOM öğelerinin etkileşimli özelliklerine kadar aynı dil kullanılması geliştirici için hayatı oldukça kolaylaştırmaktadır. Sunucu yapılandırması Apache veya Tomcat ile karşılaştırılamayacak kadar basittir. Birkaç satırlık kod ile tam anlamıyla fonksiyonel bir http sunucusu yaratabilirsiniz. 8 Bölüm 2 Kurulum ve Geliştirme Ortamı Oluşturma Node.js Kurulumu Node.js platformu çeşitli işletim sistemleri için geliştirilmiş kurulum programlarını da kullanıcılara sunmaktadır. Node.js platformunu kurmak için öncelikle platformun internet sayfası olan http://nodejs.org adresine ulaşmamız gereklidir. Resim 2.1’de görüldüğü gibi platformun anasayfasında Node.js’in iki sürümü hızlıca indirilebilir durumdadır. Resim 2.1 Node.js Anasayfası Burada Node.js platformunun sürümleri hakkında bir parantez açmak gerekiyor. Şu anda Node.js platformunun uzun süre desteklenen sürümü 4.2.2 (Long Term Support ya da kısaca LTS). Bunun yanında son kararlı sürümü 5.0.0. Kitapta Node.js geliştirme konularını ele alırken 4.2.2 sürümünü göz önüne alacağız. 5.0.0 sürümü her ne kadar kararlı bir sürüm olsa da ve bazı yeni özellikleri beraberinde getirse de Node.js geliştiricilerinin bu sürüme vereceği destek sekiz ay ile sınırlı. Halbu ki LTS sürümlerine verilen destek 18 ay sürmekte. Bu anlamda LTS sürümleri Node.js platformunu yeni tanımaya başlayan geliştiriciler için uygun bir seçim olacaktır. Şimdi Node.js platformunun çeşitli işletim sistemleri için kurulumunun nasıl yapılacağı konusunu ele alalım. Node.js Anasayfası üzerinde DOWNLOADS kısmına giriş yaptığımızda Resim 2.2.’de görebileceğimiz gibi çeşitli platformlar için kurulum dosyalarına erişebiliriz. Node.js Betiklerini Yürütme 15 Resim 2.14 Konsol Üzerinde Node.js Sürüm Numarasını Görüntüleme Node.js platformunun kurulumunu anlatırken bahsettiğimiz gibi Node.js konsol arayüzüne erişmek için konsol üzerinde node komutunu giriyoruz. Konsol arayüzüne ulaştıktan sonra isterseniz ilk programı yazalım. Konsol ekranına javaScript ile çıktı sağlamak için kullandığımız komut şöyledir. console.log("Konsolda yer alacak ifade"); Şimdi konsol üzerinde bu komutu kullanarak ilk programımız yazalım. Konsol üzerinde Merhaba Dünya yazdırmak için Resim 2.15’te görülen kodu çalıştırdığımızda ekrana istediğimiz ifade yazdırılacaktır. Resim 2.15 İlk Node.js Programı DİKKAT Dikkat ederseniz ilk programımızdaki ifadede Türkçe karakter kullanmaktan kaçındık. Kullandığınız konsol programı UTF-8 karakter kodlamasını kullanıyorsa bir probleme yol açmayabilir. Eğer sisteminiz UTF-8 dil kodlaması için doğru şekilde yapılandırılmadıysa Türkçe karakterler bir yürütme hatasına yol açabilir. Bunun için kitaptaki konsol için kodlama örneklerinde Türkçe karakter kullanmaktan kaçınacağız. Node.js Betiklerini Yürütme Konsol üzerinde JavaScript kodlarını nasıl yürüteceğimizi bir önceki başlıkta ele almıştık. Node.js geliştirme çalışmalarının büyük çoğunluğu dosya sisteminize kayıtlı .js uzantılı JavaScript dosyalarınızı yönetme şeklinde gerçekleşeceği için konsol üzerinde bu dosyaların nasıl çağrılacağının, içeriklerindeki kodların nasıl yürütüleceğinin bilinmesi oldukça önemli. Dosya sisteminde 4 NPM ile Paket Yönetimi Bu Bölümde Giriş JSON NPM Paket Yönetim Sistemi Neler Öğrendik? 32 32 34 42 Bu bölümde Öncelikle Node.js platformunun kullandığı en önemli araçlardan biri olan JSON veri transferi formatı üzerinde kısaca duracağız. NPM paket yönetim sistemini kullanarak yerel ve global modüllerin yüklenmesini, kaldırılmasını ve uygulamalarda kullanılmasını göreceğiz. 32 Bölüm 4 NPM ile Paket Yönetimi Giriş Node.js platformu gücünü akıllıca tasarlanmış modül yapısının yanısıra NPM paket yönetim sisteminden almaktadır. NPM ile geliştiriciler yazdıkları modülleri diğer geliştiricilerle paylaşabilmektedir. NPM bu modüllerin taranabilmesine, bağımlılıkların otomatik olarak çözümlenebilmesine olanak vermiştir. JSON veri transferi formatını kullanan NPM ile geliştiriciler için proje geliştirme ve paylaşma konusunda bir standart oluşturulmuştur diyebiliriz. JSON Farklı noktalarla veri alışverişi yapacak bir sistemin tasarımı yapılırken bir veri formatı ve transfer için protokol belirlenmelidir. JSON hafif, metin temelli bir veri transfer formatıdır. İnsan tarafından okunabilir olması, platformdan bağımsız olması, XML formatına göre çok daha az yer kaplaması gibi özellikleriyle zaman içinde geliştiriciler arasında popüler hale gelmiştir. Temel olarak JavaScript dilinin bir alt kümesi kullanılarak ortaya çıktığı için özellikle JavaScript dili tarafından doğal olarak çözümlenebilmektedir. JSON veri formatı iki tür yapı üzerine inşa edilmiştir. 1. İsim/değer çifti koleksiyonu 2. Sıralı değer listesi Örnek olarak alttaki koda bakalım. Süslü parantezler içerisinde üç adet isim/ değer çifti bulunmakta. Bunlar virgül ile ayrılmış ve isim ile değer arasına iki nokta üst üste konulmuştur. { "ad" : "Özcan", "soyad" : "Kasal", "dogumTarihi" : 1981 } Yukarıdaki örneği biraz daha geliştirelim. E-posta adreslerini saklayabilmek için bir isim/değer çifti daha ekledik. Burada isim olarak eposta kullanıldığını görebilirsiniz. Değer kısmında ise [ ve ] parantezleri arasında virgülle ayrılmış sıralı bir liste olduğunu görebilirsiniz. JSON 33 { "ad" : "Özcan", "soyad" : "Kasal", "dogumTarihi" : 1981, "eposta" : [ "kasal@ornekadres1.com", "kasal@ornekadres2.com", "kasal@ornekadres3.com" ] } Genel olarak JSON veri yapısı süslü parantezler içinde virgülle ayrılmış isim/değer çiftlerinden oluşur. Burada isim mutlaka çift tırnaklar arasına alınmış metin olmalıdır. Değer ise; String (alfanumerik), Number (numerik), Boolean (Doğru/ Yanlış), Array (dizi), Object (nesne) ya da Null (boş) veri formatlarından biri olmalıdır. dizi formatındaki değerler köşeli parantezlerin arasına alınır. JSON veri formatı JavaScript dilinin bir alt kümesinden türetildiği için JSON nesnelerinin JavaScript nesnelerine çevrilmesi ya da tersi oldukça basit bir işlemdir. Yukarıdaki örnekte bulunan ifadeyi bir string değişkenine aşağıdaki gibi atayalım. var text = '{' + '"ad" : "Özcan",' + '"soyad" : "Kasal",' + '"dogumTarihi" : 1981,' + '"eposta" : [' + '"kasal@ornekadres1.com",' + '"kasal@ornekadres2.com",' + '"kasal@ornekadres3.com"' + ']' + '}'; text değişkeninden yola çıkarak bir JavaScript nesnesi elde etmek için JSON. parse() yöntemini kullanabiliriz. var obj = JSON.parse(text); Böylece geçerli bir JavaScript nesnesi elde etmiş oluruz. Nesnenin özelliklerine alışılmış şekilde ulaşabiliriz. 7 Express ile Web Yönetimi Bu Bölümde Giriş Express Nedir? Jade ile HTML Şablonu Oluşturma Express Request Nesnesi Express Response Nesnesi Rota Yönetimi Neler Öğrendik? 92 92 100 104 104 105 109 Bu bölümde Express paketini kullanarak web sunucusu yaratmayı öğreneceğiz. Express ile yarattığımız sunucu için yapılandırma ayarlarını yapmayı, rota düzenlemeyi, HTTP isteklerini yönetmek için Request ve Response nesnelerini kullanmayı öğreneceğiz. Bunların yanısıra Jade şablon motoru ile HTML şablonu oluşturmayı ve Express uygulamalarında kullanımını öğreneceğiz. 92 Bölüm 7 Express ile Web Yönetimi Giriş Önceki bölümde Node.js platformunu kullanarak HTTP isteklerini nasıl yönetebileceğimiz konusuna bir giriş yaptık. Node.js platformunun çekirdek modüllerini kullanarak HTTP isteklerini yönetmeye çalışmak geliştiriciler için tekerleği yeniden icat etmek gibidir diyebiliriz. Hızlı şekilde web uygulamalarının geliştirilebileceği, HTTP ile ilgili temel konuların mümkün olduğunca az kod yazarak halledilebileceği çeşitli paketler mevcuttur. Express.js projesi Node.js platformunun http modülü ile ilgili işlemleri kolay kullanılabilir bir hale getirmek için geliştirilmiş bir projedir. http modülünün sağladığı işlevlerle sınırlı kalmayarak sunucu rotalarını yönetme, HTTP yanıt mesajlarını düzenleme/yönlendirme, çerezleri yönetme gibi konularda ek işlevler sağlamaktadır. Express Nedir? Node.js platformu için geliştirilmiş olan paketler içerisinde bugüne kadar belki de en popüler olan paket Express paketidir. Node.js ile geliştirilmiş web uygulamalarının çoğunluğunda Express kullanıldığını kolayca söyleyebiliriz. Peki Express'i bu kadar popüler yapan ne ki? Önceki bölümde gördüğümüz gibi Node.js platformu ile HTTP sunucusu oluşturmak birkaç satırda mümkün iken niye bir çerçeve program kullanalım? Bu sorulara çeşitli dozda yanıtlar verilebilir. Özetle şunları söylemek sanırım yeterli olur. Günümüzde web uygulamalarının uyması zorunlu olmasa da tercih edilen çeşitli kalıplar mevcut. Uygulamanız mümkün olduğunca MVC yapısına uygun olmalı. Rota yönlendirmeleriniz REST ilkeleri çerçevesinde yapılmalı. Tabi bu tip standartlara uygun bir web uygulamasını yalnızca Node.js platformunun çekirdek modüllerini kullanarak geliştirmek gereksiz zaman israfı olabilir. Ayrıca zaten keşfedilmiş ve geliştiricilere sunulmuş olan araçları kullanmak yerine bunları her seferinde yeniden yaratmak genel prensipler açısında çok uygun olmayabilir. Madalyonun diğer tarafında ise bu tip çerçeve programların geliştiricilere getirdiği kısıtlar bulunmakta. Geliştiriciler için kullanılan araçların sağladığı esneklik oldukça önemli bir konu. Bazen hayatını ne kadar kolaylaştıracak olsa da önüne konulan kısıtlar nedeniyle geliştiriciler uzun yolu tercih edebilirler. 100 Bölüm 7 Express ile Web Yönetimi Basitçe anlatmak gerekirse extends komutu ile kullanılacak şablon sayfaya eklenmekte. Bu şablon yine view klasöründe bulunan layout.jade dosyasıdır. Jade şablon motoruna bu bölümün devamında ayrıntılı olarak değineceğiz. Üstteki kodun devamını özetlemek gerekirse block content komutu ile layout. jade şablonunda yer alan content kısmına referans verilmektedir. Devamında yer alan kodlar layou.jade şablonunun content kısmında görüntülenecektir. routes/index dosyasında tanımlanan title değişkeni sayfaya yine title adıyla aktarılmıştır. Dikkat ederseniz tarayıcımızla ana sayfayı açtığımızda rota dosyasında tanımlandığı gibi title değişkeni ile ekrana Express yazdırılmıştır. Jade ile Html Şablonu Oluşturma Jade aslına bakarsanız html oluşturabilen bir dil olarak nitelendirilebilir. Express paketi için ön tanımlı şablon motoru olarak kullanılmaktadır. Node.js platformunun dışında Jade şablon motoru php, scala, ruby, python ve java dilleri ile de kullanılabilmektedir. Jade ile sayfaya geçilen veri yorumlanarak sayfa içerisinde istenildiği şekillerde görüntülenmesi sağlanabilmektedir. Genel anlamda şablon motorlarını kullanmamızın sebeplerinden biri sayfalarımızı dinamik olarak oluşturabilmektir. Sayfanın görüntülenme şekliyle ilgili bir değişiklik yapmak istersek sadece şablonlarımızda değişiklik yaparak diğer sayfalarımıza bu değişikliklerin yansımasını sağlayabiliriz. Jade şablon motoru boşlukları ve satır girintilerini anlamlandırarak kendi dilinin bir parçası halinde kullanabilmektedir. Jade için satır başlarında bulunan kelimeler HTML etiketleri olarak yorumlanırlar. Örneğin; satır başında div kelimesi varsa bunun html karşılığı <div></div> olarak yorumlanmaktadır. Yani Jade kullandığımızda etiket açmak ve uygun noktalarda bu etiketleri kapatmak gibi bir zorunluluğumuz yoktur. Örnek vermek gerekirse; div h1 Merhaba Express p Bu ilk Jade kullanimi satırları Jade tarafından yorumlanarak HTML diline şöyle çevrilmektedir. <div> <h1>Merhaba Express</h1> <p>Bu ilk Jade kullanimi</p> </div>